Java代码的维护与更新,Java常用的规则引擎,让你变动的代码更加容易维护
Java常用的規(guī)則引擎,讓你變動(dòng)的代碼更加容易維護(hù)
Java常用的規(guī)則引擎,讓你變動(dòng)的代碼更加容易維護(hù)
在本文中,我們將介紹Java中一些最受歡迎的規(guī)則引擎。
規(guī)則引擎由推理引擎發(fā)展而來(lái),是一種嵌入在應(yīng)用程序中的組件,實(shí)現(xiàn)了將業(yè)務(wù)決策從應(yīng)用程序代碼中分離出來(lái),并使用預(yù)定義的語(yǔ)義模塊編寫(xiě)業(yè)務(wù)決策。接受數(shù)據(jù)輸入,解釋業(yè)務(wù)規(guī)則,并根據(jù)業(yè)務(wù)規(guī)則做出業(yè)務(wù)決策。在Java中,大多數(shù)流行的規(guī)則引擎都實(shí)現(xiàn)JSR94
將規(guī)則引擎想象成一個(gè)以數(shù)據(jù)和規(guī)則作為輸入的系統(tǒng)。它將這些規(guī)則應(yīng)用于數(shù)據(jù),并根據(jù)規(guī)則定義為我們提供輸出。讓我們以一個(gè)在線(xiàn)購(gòu)物為例,我們希望為客戶(hù)提供某些促銷(xiāo)或折扣。
如果購(gòu)物車(chē)總額超過(guò)$ 400,可為客戶(hù)提供20%的折扣。
第一次下單給10%。
上面將購(gòu)物車(chē)和客戶(hù)定義為滿(mǎn)足規(guī)則集中定義的條件的規(guī)則將在其中執(zhí)行的數(shù)據(jù)。
簡(jiǎn)化系統(tǒng)架構(gòu),優(yōu)化應(yīng)用
提高系統(tǒng)的可維護(hù)性
減少編寫(xiě)“硬代碼”業(yè)務(wù)規(guī)則的成本和風(fēng)險(xiǎn)
應(yīng)付特殊狀況,即客戶(hù)一開(kāi)始沒(méi)有提到要將業(yè)務(wù)邏輯考慮在內(nèi)
過(guò)將規(guī)則引擎分開(kāi),它提供了更大的可重用性。
流程分支非常復(fù)雜,規(guī)則變量龐大
有不確定性的需求,變更頻率較高
需要快速做出響應(yīng)和決策
規(guī)則變更期望脫離于開(kāi)發(fā)人員,脫離coding
Java 中常用的開(kāi)源規(guī)則引擎有哪些呢?
Drools是業(yè)務(wù)規(guī)則管理系統(tǒng)(BRMS)解決方案。它提供了核心業(yè)務(wù)規(guī)則引擎(BRE),Web UI和規(guī)則管理應(yīng)用程序(Drools Workbench),對(duì)符合性級(jí)別3的決策模型和注釋(DMN)模型的完整運(yùn)行時(shí)支持,以及用于核心開(kāi)發(fā)的Eclipse IDE插件及Idea插件。
Drools 是一個(gè)基于Charles Forgy’s的RETE算法的,易于訪(fǎng)問(wèn)企業(yè)策略、易于調(diào)整以及易于管理的開(kāi)源業(yè)務(wù)規(guī)則引擎,符合業(yè)內(nèi)標(biāo)準(zhǔn),速度快、效率高。 業(yè)務(wù)分析師人員或?qū)徍巳藛T可以利用它輕松查看業(yè)務(wù)規(guī)則,從而檢驗(yàn)是否已編碼的規(guī)則執(zhí)行了所需的業(yè)務(wù)規(guī)則。
Drools是開(kāi)源軟件,根據(jù)Apache Software License發(fā)布。它用100%純Java?編寫(xiě),可以在任何JVM上運(yùn)行,并且在Maven Central存儲(chǔ)庫(kù)中也可用。
Drools 是業(yè)務(wù)邏輯集成平臺(tái),被分為5個(gè)項(xiàng)目:
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相關(guān)概念:
事實(shí)(Fact):對(duì)象之間及對(duì)象屬性之間的關(guān)系
規(guī)則(rule):是由條件和結(jié)論構(gòu)成的推理語(yǔ)句,一般表示為if…Then。一個(gè)規(guī)則的if部分稱(chēng)為L(zhǎng)HS,then部分稱(chēng)為RHS。
模式(module):就是指IF語(yǔ)句的條件。這里IF條件可能是有幾個(gè)更小的條件組成的大條件。模式就是指的不能在繼續(xù)分割下去的最小的原子條件。
EasyRule是輕量級(jí)的規(guī)則引擎API。它提供Rule抽象來(lái)創(chuàng)建帶有條件和動(dòng)作的規(guī)則,以及RulesEngine通過(guò)一組規(guī)則運(yùn)行以測(cè)試條件和執(zhí)行動(dòng)作的API。
以下是EasyRule的一些核心特點(diǎn):
輕量級(jí)規(guī)則引擎API。
基于注釋和POJO。
支持復(fù)合規(guī)則構(gòu)造。
支持表達(dá)語(yǔ)言(如MVEL和SpEL)來(lái)定義規(guī)則。
簡(jiǎn)單了解下easyRule
核心概念
Rule : 包含規(guī)則執(zhí)行的條件與動(dòng)作,描述,優(yōu)先級(jí)別。屬于最基本配置。
Facts:輸入對(duì)象。
RulesEngine:規(guī)則引擎執(zhí)行核心。
簡(jiǎn)單了解下使用例子
添加Maven 依賴(lài)
簡(jiǎn)易規(guī)則提供以下創(chuàng)建規(guī)則的選項(xiàng)
以聲明方式使用注釋。
務(wù)實(shí)地使用流利的API。
使用表達(dá)語(yǔ)言
使用規(guī)則描述符。
讓我們看幾個(gè)例子:
聲明式注解
或者使用函數(shù)方式
表達(dá)式方式
文件描述
執(zhí)行規(guī)則
RuleBook提供了靈活的簡(jiǎn)單直觀的DSL。如果您有更多規(guī)則集,我們可以將其構(gòu)建為帶注釋的POJO,并且RuleBook可以將整個(gè)包立即轉(zhuǎn)換為RuleBook。它提供了一個(gè)易于使用的啟用Lambda的領(lǐng)域特定語(yǔ)言或使用POJO,讓我們使用RuleBook來(lái)查看一個(gè)簡(jiǎn)單的規(guī)則定義:
Maven依賴(lài)
要將RuleBook添加到項(xiàng)目中,請(qǐng)?jiān)趐om.xml文件中添加以下依賴(lài)項(xiàng):
讓我們看一個(gè)例子:
Hello World
使用Facts
執(zhí)行規(guī)則
OpenL Tablets業(yè)務(wù)規(guī)則引擎(BRE)和業(yè)務(wù)規(guī)則管理系統(tǒng)(BRMS)。它包含以下主要組件:
Business Rules Engines(業(yè)務(wù)規(guī)則引擎)
WebStudio
Web services(web服務(wù))
Rule repository(基于JCR的實(shí)現(xiàn)的規(guī)則庫(kù))
核心概念
Rules:規(guī)則是由條件,操作和返回值組成的邏輯語(yǔ)句
Tables:列出了OpenL Tablets處理的基本信息,例如規(guī)則和數(shù)據(jù)
Projects: 是處理規(guī)則相關(guān)信息所需的所有資源的容器。通常,一個(gè)簡(jiǎn)單的項(xiàng)目?jī)H包含帶有規(guī)則的Excel文件。
maven依賴(lài)
使用
在本文中,我們討論了Java中流行的規(guī)則引擎。這些規(guī)則引擎為業(yè)務(wù)邏輯抽象提供了靈活性。在所有這些規(guī)則引擎中,Drools是最先進(jìn),最活躍的規(guī)則引擎,也正因如此,環(huán)境也是相對(duì)復(fù)雜。
EasyRule更加簡(jiǎn)潔,我們現(xiàn)在就是使用的這個(gè)解決方案。
根據(jù)自身的業(yè)務(wù)需要,選擇更加符合的業(yè)務(wù)引擎方案。
文章整理不易,請(qǐng)關(guān)注下
微信公共號(hào):
頭條號(hào):
Java常用的規(guī)則引擎,讓你變動(dòng)的代碼更加容易維護(hù)相關(guān)教程
總結(jié)
以上是生活随笔為你收集整理的Java代码的维护与更新,Java常用的规则引擎,让你变动的代码更加容易维护的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: thetae_1在MATLAB中的意思,
- 下一篇: matlab读取指定路径excel文件,