你是否应该使用规则引擎

来源:互联网 发布:oracle误删除数据恢复 编辑:程序博客网 时间:2024/06/06 08:42
“规则引擎由推理引擎发展而来,是一种嵌入在应用程序中的组件,实现了将业务决策从应用程序代码中分离出来,并使用预定义的语义模块编写业务决策。接受数据输入,解释业务规则,并根据业务规则做出业务决策。” -- 摘自百度百科。
上面的解释可能过于晦涩了。我们来看看Martin的文章,就觉得这是很简单的东西了。

Martin Fowler关于规则引擎的介绍:
https://martinfowler.com/bliki/RulesEngine.html
  • 根据 Fowler 的描述,规则引擎很简单, 可以自己设计一个,只需要condition和action,并这两者装入collection即可。
               所以,根据 Fowler 讲的,有个老外自己实现的简单引擎, 确实只需要Condition和Action:
                    https://github.com/j-easy/easy-rules
  • 我们是否应该使用规则引擎? 想象下, 当我们把可定义的规则后台开放给业务运营使用后,总会有一些程序难以把控的边界情况被业务使用后造成问题。并且,通常这种情况是程序猿意想不到的。特别的,当它还是一个定义复杂的规则的时候,通常非常难以调试。这是可以想象的, 因为有些规则没有经过程序逻辑的严谨设计。基于此,Martin 有点厌倦rule engine这类产品,甚至建议大家在没太大必要的情况下, 不要使用rule engine。
  • 基于上面的情况下, 非常有必要限制过多的condition, 特别关注有嵌套逻辑的情况。
  • 在关注性能的情况下, 请关注你使用的规则引擎是否apply了 Rete算法。
Rule engine适用场景, 个人觉得在其适用在企业自动化办公系统(OA)、内部ERP部分场景; 一般有工作流引擎需要的系统, 规则引擎也有应用的需要。但切记 不要开放过于复杂的规则逻辑给业务方使用,除非你确实能控制并fully tested。
对于电商系统, 营销功能部分, 可以使用规则引擎来实现,但不建议开放给业务侧。

如果一定要使用规则引擎,推荐使用开源的规则引擎产品 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

老外视频教学:
https://ftp.fau.de/fosdem/2010/devrooms/jboss/drools.ogg

guide links:
https://stackoverflow.com/questions/2606603/how-to-learn-drools-or-another-rule-engine-fast

原创粉丝点击