你是否应该使用规则引擎

xiaoxiao2021-02-28  109

“规则引擎由推理引擎发展而来,是一种嵌入在应用程序中的组件,实现了将业务决策从应用程序代码中分离出来,并使用预定义的语义模块编写业务决策。接受数据输入,解释业务规则,并根据业务规则做出业务决策。” -- 摘自百度百科。 上面的解释可能过于晦涩了。我们来看看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
转载请注明原文地址: https://www.6miu.com/read-67320.html

最新回复(0)