在本文中,咱們將介紹Java中一些最受歡迎的規則引擎。web
規則引擎由推理引擎發展而來,是一種嵌入在應用程序中的組件,實現了將業務決策從應用程序代碼中分離出來,並使用預約義的語義模塊編寫業務決策。接受數據輸入,解釋業務規則,並根據業務規則作出業務決策。在Java中,大多數流行的規則引擎都實現JSR94算法
將規則引擎想象成一個以數據和規則做爲輸入的系統。它將這些規則應用於數據,並根據規則定義爲咱們提供輸出。讓咱們以一個在線購物爲例,咱們但願爲客戶提供某些促銷或折扣。微信
若是購物車總額超過$ 400,可爲客戶提供20%的折扣。架構
第一次下單給10%。maven
上面將購物車和客戶定義爲知足規則集中定義的條件的規則將在其中執行的數據。函數
簡化系統架構,優化應用測試
提升系統的可維護性優化
減小編寫「硬代碼」業務規則的成本和風險編碼
應付特殊情況,即客戶一開始沒有提到要將業務邏輯考慮在內spa
過將規則引擎分開,它提供了更大的可重用性。
流程分支很是複雜,規則變量龐大
有不肯定性的需求,變動頻率較高
須要快速作出響應和決策
規則變動指望脫離於開發人員,脫離coding
Java 中經常使用的開源規則引擎有哪些呢?
Drools是業務規則管理系統(BRMS)解決方案。它提供了核心業務規則引擎(BRE),Web UI和規則管理應用程序(Drools Workbench),對符合性級別3的決策模型和註釋(DMN)模型的完整運行時支持,以及用於核心開發的Eclipse IDE插件及Idea插件。
Drools 是一個基於Charles Forgy’s的RETE算法的,易於訪問企業策略、易於調整以及易於管理的開源業務規則引擎,符合業內標準,速度快、效率高。 業務分析師人員或審覈人員能夠利用它輕鬆查看業務規則,從而檢驗是否已編碼的規則執行了所需的業務規則。
Drools是開源軟件,根據Apache Software License發佈。它用100%純Java™編寫,能夠在任何JVM上運行,而且在Maven Central存儲庫中也可用。
Drools 是業務邏輯集成平臺,被分爲5個項目:
Drools Workbench (web UI )
Drools Expert (business rules engine)
Drools Fusion (complex event processing features)
jBPM (process/workflow integration for rule orchestration/flow)
OptaPlanner (automated planning)
Drools相關概念:
事實(Fact):對象之間及對象屬性之間的關係
規則(rule):是由條件和結論構成的推理語句,通常表示爲if…Then。一個規則的if部分稱爲LHS,then部分稱爲RHS。
模式(module):就是指IF語句的條件。這裏IF條件多是有幾個更小的條件組成的大條件。模式就是指的不能在繼續分割下去的最小的原子條件。
EasyRule是輕量級的規則引擎API。它提供Rule抽象來建立帶有條件和動做的規則,以及RulesEngine經過一組規則運行以測試條件和執行動做的API。
如下是EasyRule的一些核心特色:
輕量級規則引擎API。
基於註釋和POJO。
支持複合規則構造。
支持表達語言(如MVEL和SpEL)來定義規則。
簡單瞭解下easyRule
核心概念
Rule : 包含規則執行的條件與動做,描述,優先級別。屬於最基本配置。
Facts:輸入對象。
RulesEngine:規則引擎執行核心。
簡單瞭解下使用例子
添加Maven 依賴
簡易規則提供如下建立規則的選項
以聲明方式使用註釋。
務實地使用流利的API。
使用表達語言
使用規則描述符。
讓咱們看幾個例子:
聲明式註解
或者使用函數方式
表達式方式
文件描述
執行規則
RuleBook提供了靈活的簡單直觀的DSL。若是您有更多規則集,咱們能夠將其構建爲帶註釋的POJO,而且RuleBook能夠將整個包當即轉換爲RuleBook。它提供了一個易於使用的啓用Lambda的領域特定語言或使用POJO,讓咱們使用RuleBook來查看一個簡單的規則定義:
Maven依賴
要將RuleBook添加到項目中,請在pom.xml文件中添加如下依賴項:
讓咱們看一個例子:
Hello World
使用Facts
執行規則
OpenL Tablets業務規則引擎(BRE)和業務規則管理系統(BRMS)。它包含如下主要組件:
Business Rules Engines(業務規則引擎)
WebStudio
Web services(web服務)
Rule repository(基於JCR的實現的規則庫)
核心概念
Rules:規則是由條件,操做和返回值組成的邏輯語句
Tables: 列出了OpenL Tablets處理的基本信息,例如規則和數據
Projects: 是處理規則相關信息所需的全部資源的容器。一般,一個簡單的項目僅包含帶有規則的Excel文件。
maven依賴
使用
在本文中,咱們討論了Java中流行的規則引擎。這些規則引擎爲業務邏輯抽象提供了靈活性。在全部這些規則引擎中,Drools是最早進,最活躍的規則引擎,也正因如此,環境也是相對複雜。
EasyRule更加簡潔,咱們如今就是使用的這個解決方案。
根據自身的業務須要,選擇更加符合的業務引擎方案。
文章整理不易,請關注下
微信公共號:
頭條號: