关于规则引擎--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 Easy Rules 是一款 Java 规则引擎,它的诞生启发自有Martin F...
    聆世冷暖阅读 4,771评论 0 2
  • 简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。 在上一篇文章中创建规则引擎时,用的是如...
    蓝天白云bubble阅读 12,238评论 5 16
  • Drools语法-Language 关键词 Pakage packagepackage表示一个命名空间.packa...
    大方一号阅读 13,786评论 2 7
  • 产品简介 单据录入项目指的是发包商(比如保险公司)需要将单据中的部分字段内容录入到系统里面,由于单据数量庞大,需要...
    威客方案阅读 2,887评论 0 1
  • 他远在她情感的彼岸。时值9月,北京秋高气爽,那个晚上,刘一个人跑到录音棚附近的一个小酒馆喝了二锅头,结果喝得烂醉。...
    笠早阅读 367评论 0 0