一钓葫、常用規(guī)則引擎 Drools悄蕾、easyRule、QlExpress础浮、Aviator帆调、Vincio
按照GitHub上star排序,依次2.5k豆同、1.8k番刊、1.7k、1.3k影锈、未搜索到
二芹务、規(guī)則引擎概述
規(guī)則與規(guī)則之間如何執(zhí)行,這個涉及到規(guī)則屬性的定義鸭廷,用于修改和增強(qiáng)標(biāo)準(zhǔn)的規(guī)則行為枣抱。
優(yōu)先級(salience):可以設(shè)置規(guī)則執(zhí)行順序,優(yōu)先級高的優(yōu)先執(zhí)行
同步分組(agenda-group): 同一個分組的規(guī)則要么都執(zhí)行要么都不執(zhí)行
互斥分組(activation-group):同一個分組只有一條被執(zhí)行辆床,其他不執(zhí)行
三佳晶、easy rules的使用記錄
內(nèi)容參考自GitHub easy rules官方文檔 https://github.com/j-easy/easy-rules
五、easy-rules的特點
1讼载、輕量級類庫和容易上手
2轿秧、基于POJO的開發(fā)與注解的編程模型
3、基于MVEL表達(dá)式的編程模型(適用于極簡單的規(guī)則咨堤,一般不推薦)
4菇篡、支持根據(jù)簡單的規(guī)則創(chuàng)建組合規(guī)則
5、方便且適用于java的抽象的業(yè)務(wù)模型規(guī)則
六一喘、easy-rules 規(guī)則表示
name: 名稱,規(guī)則名稱空間中的唯一規(guī)則名稱
Description: 說明,該規(guī)則的簡要說明
Priority:優(yōu)先級逸贾,關(guān)于其他規(guī)則的規(guī)則優(yōu)先級(在別的文檔中看到,如果值越小優(yōu)先級越高。即:0值優(yōu)先級高于1值)
Facts:我理解的是觸發(fā)規(guī)則的事件 ***********
Conditions:條件铝侵,為了應(yīng)用規(guī)則而在某些事實下應(yīng)滿足的一組條件
Actions:動作灼伤,在條件滿足時執(zhí)行的一組動作(可能會添加/刪除/修改事實)
七、easy-rules定義規(guī)則的五中方式
1咪鲜、注解的方式
2狐赡、java流的方式
3、表達(dá)式(就是new的方式)
4疟丙、引入外部yml規(guī)則文件
5颖侄、ruleBuilder的方式
八、復(fù)合規(guī)則
復(fù)合規(guī)則的三種實現(xiàn)
1享郊、UnitRuleGroup:單位規(guī)則組是充當(dāng)單位的組合規(guī)則:要么應(yīng)用所有規(guī)則览祖,要么不應(yīng)用任何規(guī)則。
2炊琉、ActivationRuleGroup:激活規(guī)則組是一個組合規(guī)則展蒂,它會觸發(fā)第一個適用規(guī)則,而忽略該組中的其他規(guī)則(XOR邏輯)苔咪。規(guī)則首先按組中的自然順序(默認(rèn)情況下為優(yōu)先級)排序锰悼。
3、ConditionalRuleGroup:條件規(guī)則組是一個組合規(guī)則团赏,其中具有最高優(yōu)先級的規(guī)則作為條件:如果具有最高優(yōu)先級的規(guī)則求值為true箕般,則將觸發(fā)其余規(guī)則。
九舔清、個人觀點
1丝里、如果不考慮規(guī)則引擎有獨立編寫rules.yml配置文件的方式,可以在生產(chǎn)中不改代碼完成部分配置的情況体谒,我認(rèn)為規(guī)則引擎是策略模式的一種實現(xiàn)方式
2杯聚、規(guī)則引擎似乎可以讓你寫出更加優(yōu)雅的if/else