设计模式/建议构建规则引擎

时间:2012-05-15 05:07:59

标签: ruby dsl rules business-rules rule-engine

我需要构建一个应用程序(Ruby),允许用户选择一个或多个模式,以防这些模式匹配以继续并完成一组操作。 在进行我的研究时,我发现了基于规则的系统的新(对我而言)领域并花了一些时间阅读它,它似乎正是我需要的那种功能。

该应用程序将与不同的Web服务集成,并允许这样的规则:

添加Highrise联系人并创建Zendesk票证时,请向数据库添加电子邮件

我有两个想法来构建它。首先是构建一些类型的os DSL,以便能够指定规则条件并使用用户输入动态构建它们。

第二个是构建一些规则类,每个规则类都有一个模式/匹配器和动作方法。模式将评估表达式并返回true或false,如果匹配为正,则执行操作。

然后需要保留规则,然后定期评估。

任何人都可以对这个设计有所了解,或指出哪些地方可以获得更多相关信息?

由于

2 个答案:

答案 0 :(得分:0)

您认为您可以在基于图表的表示中表示您的问题吗?我很确定您的问题可以被视为基于图表的问题

如果是,为什么不使用图形转换系统来定义和应用规则。我推荐的是GrGen.NET。 GrGen.NET的使用基于五个步骤构建

  1. 元模型的定义:在此,您可以定义构建块,即图形节点和图形边缘的类型。
  2. 规则集的定义:您可以在此处放置模式检测规则。此外,您可以创建规则封装过程来操作基于图形的数据结构。
  3. 编译:根据前两个步骤,创建一个C#-assembly(DLL)。应该有办法从Ruby访问这样的DLL。
  4. 规则序列的定义:规则序列包含执行各个规则的结构。通常,它是连接规则的逻辑结构。
  5. 图形转换:在DLL上应用规则序列会导致图形转换,随后可以导出,保存或进一步操作。
  6. 您可以在这里找到一本非常好的GrGen.NET手册:http://www.info.uni-karlsruhe.de/software/grgen/GrGenNET-Manual.pdf

答案 1 :(得分:0)

在商业规则引擎中,例如Drools,FlexRule ......模式匹配由RETE算法处理。并且,它们中的一些为不同的逻辑提供多个不同的引擎,例如程序,验证,推理,流程,工作流程......并且他们还提供DSL定制...... 规则排序和执行基于可在引擎上定义的议程和激活来处理。冲突解决策略可以帮助您找到适当的激活方式。

我建议您使用托管在主机/服务上的商业产品。并使用简单的Json / Xml格式与规则服务器通信并执行规则。这可能会比创建自己的结果更好。但是,如果您有兴趣创建自己的模式匹配引擎,请考虑复杂生产系统的RETE算法,议程和激活机制。

在RETE算法中,您可以考虑至少实现正面和负面条件。在实施RETE时,您需要实现beta和alpha内存以及支持左右激活的广告加入节点。