Java规则引擎的优缺点

120

采用Java规则引擎JESSDrools有什么优缺点?还有其他竞争者吗?

我知道Drools是开源的,而JESS不是,但它们在易用性、性能、与代码集成程度等其他方面如何比较?

5个回答

133
如果你需要将业务规则与应用程序逻辑分开,请使用规则引擎。文章“Does Your Project Need a Rule Engine”提供了一个很好的例子:(点击此处查看)。例如,典型的商店系统可能涉及计算折扣的代码:
if (product.quantity > 100 && product.quantity < 500) {
  product.discount = 2;
} else if (product.quantity >= 500 && product.quantity < 2000) {
  product.discount = 5;
} else if (product.quantity >= 2000) {
  product.discount = 10;
}

规则引擎将上述代码替换为以下代码:

ruleEngine.applyRules(product);
由你决定是否将规则管理控制台交给非技术人员是好事还是坏事 :) 更多详细信息请参见应该使用规则引擎吗?为什么要使用规则引擎?有关是否使用规则引擎的一些指南以及Google。 其他玩家包括JRules、Corticon(我认为JRules是最著名的,但并不意味着是最好的)。 无法准确告诉你它们在其他方面(如易用性、性能、与您的代码集成程度等)的比较情况。但我只有一点(积极的)使用Drools的经验。但是你可以从博客文章中获得一些反馈,例如JBoss Drools vs ILog JRules-一个轶事般的故事(一定要阅读)或从JRules的角度使用Drools。我相信你可以在谷歌上找到更多相关信息(但我建议你尝试一下Drools)。

1
您的答案看起来不错。请问您可以告诉我何时使用Drools和何时使用Jess吗?基本上,我希望得到更多有关Drools和Jess之间区别的答案。 - Isabel Jinson
8
哇,@Pascal,那个产品数量/折扣的例子真是让人摸不着头脑。假设数量是5,000。第一个IF语句为true,后面的ELSE IF语句都没有被执行。将这种业务逻辑放在规则引擎中并不能帮助解决任何问题,尽管它可能会使查找错误变得更加困难。 - DOK
为他辩护,那个例子是来自第一篇文章。不太确定它看起来还有多可信... :) - Jeb
7
将规则控制交由非技术人员管理的危险性,这是一个典型的不良示例。 - Pace
2
为什么使用规则引擎?是列出的链接中最好的。 - Aravind Yarram

17

我们目前正在评估与我们的应用服务器一起使用的规则。我们发现了OpenRules,它很容易与Java集成,并且据我们测试表明,足够快速。 OpenRules的主要优点在于修改和处理规则的方式。所有这些都在Excel表格中进行,这是非程序员最简单的方法。甚至涉及到非技术人员的所有人都完全理解了 :-)

我们还集成了Drools,但规则更加复杂,因为它采用更加编程化的方法。这就是为什么我们 - 很可能 - 会坚持使用OpenRules的原因。


22
Drools 也支持通过 Excel 编辑规则和通过 web 界面编辑规则。 - retronym

9
我们曾经也有类似的问题,最终我们选择了Drools,如果您符合以下情况,请使用Drools:
  • 由于各种情况而导致业务逻辑越来越混乱,您认为需要使用多个if条件语句
  • 您将需要增加复杂性
  • 业务逻辑变更频繁(一年至少1-2次)
  • 如果您的服务器具备足够的内存,这是一个性能占用内存的工具
请查看以下详细信息:URL

3

只是想要添加一个信息,很多人正在寻找更类似于管理某些条件以启用或禁用应用程序中某些功能的方法。

我厌倦了在每个地方重复实现相同的模式,所以我决定为它创建一个名为 Roolie 的开源项目 http://sourceforge.net/projects/roolie/

我刚刚将其转化为 Maven 项目,并且自2010年发布以来没有报告过任何错误,我升级到v1.0版本,除了在 Maven Central 上托管所需的更改外,没有做其他修改(我正在进行这个过程)。

基本上,JSR-94 对于大多数事情来说都太过于复杂了,当前方案中存在巨大的学习曲线和开销。如果这是你想要的,那就没问题。但是,如果你只想用 Java 编写简单的规则并使用 XML 将它们链接在一起以维护状态测试,那么 Roolie 是一种非常快速的方法。无依赖关系,也没有什么学习曲线。


3
Roolie在SourceForge上声称它是MIT许可,但代码报告为LGPLv3。这基本上意味着在任何商业产品中使用它都是可疑的(在某些开源产品中也是如此)。请参见http://nmav.gnutls.org/2013/03/the-perils-of-lgplv3.html。 - ingyhere

2
当我们需要规则引擎时,我们决定自己开发,因为现有的规则引擎对于我们简单的任务来说过于复杂。如果你对解析用户输入的表达式有一点经验,这并不难做到。在我们的情况下,大部分规范由XSD处理,只有少数字段需要进一步解析。

9
规则引擎使用成熟的算法(如正向链接和Rete算法)以应对非微不足道的问题。如果您只是需要评估表达式,那么现有的库(如MVEL)可能会有所帮助。 - jevon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接