-1

我正在设计一个简单的规则引擎。让我从概述开始。

引擎使用配置文件初始化,该配置文件指定要运行的规则以及这些规则打算使用的参数。

例子:

我有一个传入的订单对象,我想对其进行一些完整性检查,例如订单数量不能大于某个数量 X(x 作为参数传递给引擎。)这是一个参数的简单示例通过了。

一个复杂的例子:

一些订单类型.一些地区.一些办公桌.订单数量 = X

一些订单类型.一些地区.一些柜台.一些交易者.数量 = y。

一些订单类型.一些地区.一些产品.每日交易量 = A

一些订单类型.一些地区.一些办公桌.每日交易量 = B

很多像这样的参数用于初始化引擎,这些参数打算被规则使用。

问题:

这些初始化参数应该如何传递给 API?——JSON、XML ???

表示、处理和存储这些参数的最佳软件设计实践是什么,以便规则可以使用这些信息(比如交易者组允许的数量是多少?对传入的订单对象进行完整性检查)

我打算在 C++ 中实现它

提前致谢

4

1 回答 1

3

在开始创建新规则引擎之前,您应该真正意识到所涉及的复杂性,例如Rete 算法,如果您计划维护超过数千条规则,这是有道理的,因为从这些数字开始,如果您按顺序评估规则,它会变得令人望而却步。 ,而性能在交易系统中尤为重要。我实际上会研究和探索重用现有的规则引擎,例如CLIPSdrools、 JRules 等。

另一个有希望的可能性是在您的进程中嵌入某种脚本语言(通常可能在 Java 中),它可以访问您的内存域模型,例如嵌入一个 Python解释器并将其用作您的“规则引擎”。如果您绝对必须实现自己的,那么您可以使用 yacc 和 lex 但上次我使用它时,我记得它并不是很有趣,您必须意识到复杂性,即如果您计划拥有数千个或更多规则。

对于规则管理,即簿记、编辑、注释、版本控制等,您将需要 XML 并将实际规则放在CDATA元素下。

于 2012-12-10T23:11:47.917 回答