很早之前就知道Drools,这几天正好有个项目,里面用了大量的规则定义,就想是否能采用Drools来解决。
在github上分析了规则引擎项目,包括:
Easy-rules
https://github.com/j-easy/easy-rules
通过程序代码来完成规则引擎,没有外部配置。从例子来看,都还比较简单。
https://github.com/Hale-Lee/RuleEngine
最好使用的规则引擎之一,可以直接使用SQL语句定义规则,简化了编码的负荷,也可以使用XML, drl文件配置规则,还支持drools文件导入。
RuleBook
https://github.com/rulebook-rules/rulebook
100% Java, Lambda Enabled, Lightweight Rules Engine with a Simple and Intuitive DSL,和spring有很好的集成。
这些引擎的基本思路都是按Martin Fowler的文章"Should I use a Rules Engine?"的指导来开发。和Drools比较起来,这几个项目都简单不少。
从某种意义上来说,程序即使规则的组合。使用规则引擎,基本的出发点是解决业务规则的多多变性问题,如果在进一步考虑规则的可配置型,并且是界面友好的可配置,这样的系统就比较复杂了,可以参考美团的实践,
从0到1:构建强大且易用的规则引擎mp.weixin.qq.com其实还有一种更加灵活的变通解决方案,就是利用Java的Script引擎来直接执行JavaScript脚本,将输入和输入都定义成一个Map<String ,Object>,规则判断都可以通过JavaScript来编写
这种方式虽然更加灵活,但并不能解决规则本身的复用性问题。但在实际应用中,规则都是和具体流程绑定,规则本身的复用性价值有多大呢?
基于JavaScrip的引擎可以参考以下两个项目:
json-rules-engine
https://github.com/CacheControl/json-rules-engine
A rules engine expressed in JSON
Node-rules
https://github.com/mithunsatheesh/node-rules
Node-rules is a light weight forward chaining rule engine written in JavaScript.