“规则引擎由推理引擎发展而来,是一种嵌入在应用程序中的组件,实现了将业务决策从应用程序代码中分离出来,并使用预定义的语义模块编写业务决策。接受数据输入,解释业务规则,并根据业务规则做出业务决策。” -- 摘自百度百科。
上面的解释可能过于晦涩了。我们来看看Martin的文章,就觉得这是很简单的东西了。
Martin Fowler关于规则引擎的介绍:
- 根据 Fowler 的描述,规则引擎很简单, 可以自己设计一个,只需要condition和action,并这两者装入collection即可。
所以,根据 Fowler 讲的,有个老外自己实现的简单引擎, 确实只需要Condition和Action:
- 我们是否应该使用规则引擎? 想象下, 当我们把可定义的规则后台开放给业务运营使用后,总会有一些程序难以把控的边界情况被业务使用后造成问题。并且,通常这种情况是程序猿意想不到的。特别的,当它还是一个定义复杂的规则的时候,通常非常难以调试。这是可以想象的, 因为有些规则没有经过程序逻辑的严谨设计。基于此,Martin 有点厌倦rule engine这类产品,甚至建议大家在没太大必要的情况下, 不要使用rule engine。
- 基于上面的情况下, 非常有必要限制过多的condition, 特别关注有嵌套逻辑的情况。
- 在关注性能的情况下, 请关注你使用的规则引擎是否apply了 Rete算法。
对于电商系统, 营销功能部分, 可以使用规则引擎来实现,但不建议开放给业务侧。
如果一定要使用规则引擎,推荐使用开源的规则引擎产品 Drools, 以下附上相关资料供学习之:
官方文档:
http://www.jboss.org/drools/documentation.html
There are two books from PackIt publishing that aren't bad:
https://www.packtpub.com/drools-jboss-rules-5-0-developers-guide/book
https://www.packtpub.com/jboss-drools-business-rules/book
InfoQ上面的一遍好文章:
http://www.infoq.com/articles/Rule-Engines