哪种模式/模式最适合开发规则/决策引擎

时间:2010-01-24 10:45:14

标签: .net design-patterns business-logic business-rules

我正在研究决策引擎/规则评估引擎。例如:

输入:客户和客户完成的所有违规行为

输出:罪行的后果

示例案例将是:

输入:客户(Jhonny Chimpo,999-00-1111),违规行为(打破了窗口,打了一巴掌,在他的腹股沟踢了团队领导)

输出:获取粉红色滑动

因此,我想写的代码根据每个攻击和组合攻击的规则来评估不同的攻击。当前代码只是if和else语句的迷宫。我确信这些业务问题很常见。通常使用什么设计/企业模式来解决这样的问题?

是规格模式吗?我希望代码可以打开以进行扩展,清洁和灵活。

6 个答案:

答案 0 :(得分:3)

我可以建议你使用我们用来解决类似问题的工具。

看看JBoss Drools:http://www.jboss.org/drools/

这是一个BRMS:业务规则管理系统

这是一个介绍性视频:http://www.jboss.com/products/platforms/brms/

答案 1 :(得分:3)

基本上,业务规则类似于

forall rules:
  if <condition> then doAction();

如果按照严重程度使用分数对所有犯罪进行分类,或许对频繁的“邪恶行为者”额外奖励,某些犯罪可能会成为时间限制,无论需要什么。

然后算法的草稿可以是:

  • 客户所有分数的总和(加权)
  • 与最大值
  • 比较

使用数据结构而不是很多(可能是深度嵌套的)if..then..else的东西,这是直截了当的。

答案 2 :(得分:1)

我不确定上面的任何答案是否有帮助。

我使用expression trees编写了类似的组件。您可以构建表示谓词的lambda表达式,动态地编译和执行它们,然后在响应中触发一些操作。这种方法功能强大,灵活,可以去除所有if / else恐怖(绝对不是这样)。

然而,你真正在谈论的是逻辑编程。 Prolog over .NET有很多实现。 Prolog是一种基于逻辑的语言,很多用于AI应用程序,一旦你了解它的范例,它就会变得非常强大。

看看其中的一些..

答案 3 :(得分:0)

您可以尝试类似于this "event based" rules engine

的内容

答案 4 :(得分:0)

我认为任何基于RETE算法的规则引擎都适用于您的情况。你可以试试drools。

答案 5 :(得分:-1)

我认为你正在努力开发专家系统。您可以检查术语,然后检查相应的编程语言为prolog等。