关于规则引擎--easy rules

一、常用规则引擎 Drools、easyRule、QlExpress、Aviator、Vincio
按照GitHub上star排序,依次2.5k、1.8k、1.7k、1.3k、未搜索到

二、规则引擎概述
规则与规则之间如何执行,这个涉及到规则属性的定义,用于修改和增强标准的规则行为。
优先级(salience):可以设置规则执行顺序,优先级高的优先执行
同步分组(agenda-group): 同一个分组的规则要么都执行要么都不执行
互斥分组(activation-group):同一个分组只有一条被执行,其他不执行

三、easy rules的使用记录
内容参考自GitHub easy rules官方文档 https://github.com/j-easy/easy-rules

五、easy-rules的特点
1、轻量级类库和容易上手
2、基于POJO的开发与注解的编程模型
3、基于MVEL表达式的编程模型(适用于极简单的规则,一般不推荐)
4、支持根据简单的规则创建组合规则
5、方便且适用于java的抽象的业务模型规则

六、easy-rules 规则表示
name: 名称,规则名称空间中的唯一规则名称
Description: 说明,该规则的简要说明
Priority:优先级,关于其他规则的规则优先级(在别的文档中看到,如果值越小优先级越高。即:0值优先级高于1值)
Facts:我理解的是触发规则的事件 ***********
Conditions:条件,为了应用规则而在某些事实下应满足的一组条件
Actions:动作,在条件满足时执行的一组动作(可能会添加/删除/修改事实)

七、easy-rules定义规则的五中方式
1、注解的方式


image.png

2、java流的方式


image.png

3、表达式(就是new的方式)
image.png

4、引入外部yml规则文件
image.png

5、ruleBuilder的方式


image.png

八、复合规则
复合规则的三种实现
1、UnitRuleGroup:单位规则组是充当单位的组合规则:要么应用所有规则,要么不应用任何规则。
2、ActivationRuleGroup:激活规则组是一个组合规则,它会触发第一个适用规则,而忽略该组中的其他规则(XOR逻辑)。规则首先按组中的自然顺序(默认情况下为优先级)排序。
3、ConditionalRuleGroup:条件规则组是一个组合规则,其中具有最高优先级的规则作为条件:如果具有最高优先级的规则求值为true,则将触发其余规则。

九、个人观点
1、如果不考虑规则引擎有独立编写rules.yml配置文件的方式,可以在生产中不改代码完成部分配置的情况,我认为规则引擎是策略模式的一种实现方式
2、规则引擎似乎可以让你写出更加优雅的if/else

你可能感兴趣的:(关于规则引擎--easy rules)