规则引擎中的动态配置规则

时间:2012-12-09 20:30:24

标签: c++ design-patterns software-design rule-engine

我正在设计一个简单的规则引擎。首先让我概述一下。

使用配置文件初始化引擎,该文件具体说明要运行的规则以及这些规则要使用的参数。

示例:

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

一个复杂的例子:

某些订单Type.Some region.Some desk.Order Quantity = X

某些订单类型。某些区域。有些桌面。有些交易员。数量= y。

某些订单Type.Some region.Some Product.Daily Volume = A

某些订单类型。某些区域。有些桌面。每日卷= B

许多像这样的参数用于初始化规则所使用的引擎。

问题:

如何将这些初始化参数传递给API? - JSON,XML ???

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

我打算在C ++中实现它

提前致谢

1 个答案:

答案 0 :(得分:3)

在开始创建新规则引擎之前,您应该真正了解所涉及的复杂性,例如: Rete Algorithm如果您计划维护数以千计的规则,这是有道理的,因为从这些数字开始,如果您按顺序评估规则,那么它在性能方面变得过高,而且在交易系统中性能尤为重要。我实际上会研究和探索重用现有的规则引擎,例如CLIPSdrools,JRules等

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

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