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)。我们目前正在评估与我们的应用服务器一起使用的规则。我们发现了OpenRules,它很容易与Java集成,并且据我们测试表明,足够快速。 OpenRules的主要优点在于修改和处理规则的方式。所有这些都在Excel表格中进行,这是非程序员最简单的方法。甚至涉及到非技术人员的所有人都完全理解了 :-)
我们还集成了Drools,但规则更加复杂,因为它采用更加编程化的方法。这就是为什么我们 - 很可能 - 会坚持使用OpenRules的原因。
只是想要添加一个信息,很多人正在寻找更类似于管理某些条件以启用或禁用应用程序中某些功能的方法。
我厌倦了在每个地方重复实现相同的模式,所以我决定为它创建一个名为 Roolie 的开源项目 http://sourceforge.net/projects/roolie/。
我刚刚将其转化为 Maven 项目,并且自2010年发布以来没有报告过任何错误,我升级到v1.0版本,除了在 Maven Central 上托管所需的更改外,没有做其他修改(我正在进行这个过程)。
基本上,JSR-94 对于大多数事情来说都太过于复杂了,当前方案中存在巨大的学习曲线和开销。如果这是你想要的,那就没问题。但是,如果你只想用 Java 编写简单的规则并使用 XML 将它们链接在一起以维护状态测试,那么 Roolie 是一种非常快速的方法。无依赖关系,也没有什么学习曲线。