【问题标题】:Design patterns/advise on building a Rule engine设计模式/关于构建规则引擎的建议
【发布时间】:2012-05-22 14:13:11
【问题描述】:

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

该应用将与不同的网络服务集成,并允许以下规则:

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

我有两个想法来构建它。第一个是构建某种 os DSL,以便能够指定规则条件并根据用户输入动态构建它们。

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

这些规则需要被持久化,然后定期评估。

任何人都可以阐明这个设计或指出我可以获得更多信息的地方吗?

谢谢

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

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

      1. 元模型的定义:在这里,您可以定义构建块,即图节点和图边的类型。
      2. 规则集的定义:这是您可以放置​​模式检测规则的地方。此外,您可以创建规则封装程序来操作基于图形的数据结构。
      3. 编译: 基于前面两个步骤,创建了一个 C# 程序集 (DLL)。应该有一种方法可以从 Ruby 访问这样的 DLL。
      4. 规则序列的定义:规则序列包含执行各个规则的结构。通常,它是一种规则串联的逻辑结构。
      5. 图表转换:在 DLL 上应用规则序列会导致图表转换,随后可以导出、保存或进一步操作。

      你可以在这里找到一本非常好的 GrGen.NET 手册:http://www.info.uni-karlsruhe.de/software/grgen/GrGenNET-Manual.pdf

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-06-12
        • 1970-01-01
        • 2014-03-30
        • 1970-01-01
        • 2013-12-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多