摘要:規(guī)則引擎是一種嵌入在應(yīng)用程序中的組件。起源于基于規(guī)則的專(zhuān)家系統(tǒng)。它可以在應(yīng)用系統(tǒng)中分離商業(yè)決策邏輯和程序邏輯。目前的商用規(guī)則引擎,包括JBoss Rules,基本上都是基于Ret算法。文章先敘述了規(guī)則引擎的原理及Java規(guī)則引擎工作機(jī)制,然后介紹了Drools中改進(jìn)后的Ret算法,最后以實(shí)例說(shuō)明了如何在應(yīng)用程序中使用JBossRules來(lái)管理規(guī)則。
關(guān)鍵詞:規(guī)則引擎;Rete算法;JBoss Rules;Drools
0 引言
任何軟件開(kāi)發(fā)過(guò)程都是從需求到設(shè)計(jì)再到編碼的,企業(yè)應(yīng)用系統(tǒng)也如此。在傳統(tǒng)企業(yè)應(yīng)用系統(tǒng)開(kāi)發(fā)中,業(yè)務(wù)規(guī)則是由用戶(hù)在需求分析階段提供,內(nèi)嵌在程序代碼中,它使用復(fù)雜的if-else語(yǔ)句來(lái)構(gòu)成,一旦開(kāi)發(fā)完成,便不易變更。然而現(xiàn)實(shí)情況卻是業(yè)務(wù)規(guī)則往往頻繁地變更,往往在設(shè)計(jì)和編碼完成后還在變化,每一項(xiàng)規(guī)則的變化都需要開(kāi)發(fā)人員對(duì)那些復(fù)雜的if-else語(yǔ)句進(jìn)行修改,這無(wú)疑增加了系統(tǒng)的更新成本。正因?yàn)槿绱?,所以企業(yè)管理者希望業(yè)務(wù)人員能夠直接管理應(yīng)用系統(tǒng)中的規(guī)則,不需要程序開(kāi)發(fā)人員的參與。但問(wèn)題是,很多復(fù)雜的規(guī)則,對(duì)于開(kāi)發(fā)人員也很難推導(dǎo)出算法和抽象出數(shù)據(jù)模型,且業(yè)務(wù)規(guī)則往往嵌在系統(tǒng)的各處代碼中,不可能讓非開(kāi)發(fā)人員管理。于是規(guī)則引擎應(yīng)運(yùn)而生,它的出現(xiàn)給開(kāi)發(fā)人員帶來(lái)了解決上述問(wèn)題的契機(jī)。
1 業(yè)務(wù)規(guī)則及規(guī)則引擎
一個(gè)業(yè)務(wù)規(guī)則由一組條件和在此條件下執(zhí)行的操作組成,它們表示業(yè)務(wù)規(guī)則應(yīng)用程序的一段業(yè)務(wù)邏輯。業(yè)務(wù)規(guī)則通常應(yīng)該由業(yè)務(wù)人員和策略管理者開(kāi)發(fā)和修改,但有些復(fù)雜的業(yè)務(wù)規(guī)則也可以由技術(shù)人員使用面向?qū)ο蟮募夹g(shù)語(yǔ)言腳本來(lái)定制。業(yè)務(wù)規(guī)則的理論基礎(chǔ)是:設(shè)置一個(gè)或多個(gè)條件,當(dāng)滿(mǎn)足條件時(shí)會(huì)觸發(fā)一個(gè)或多個(gè)操作。
規(guī)則引擎是一種嵌入在應(yīng)用程序中的組件,它起源于基于規(guī)則的專(zhuān)家系統(tǒng)(RBES),而基于規(guī)則的專(zhuān)家系統(tǒng)又是專(zhuān)家系統(tǒng)的一個(gè)分支。專(zhuān)家系統(tǒng)屬于人工智能的范疇,它模仿人類(lèi)的推理方式,使用試探性的方法進(jìn)行推理。并使用人類(lèi)能理解的術(shù)語(yǔ)解釋和證明它的推理結(jié)論。規(guī)則引擎的任務(wù)是把當(dāng)前提交給引擎的數(shù)據(jù)對(duì)象與加載在引擎中的業(yè)務(wù)規(guī)則進(jìn)行比較,激活那些符合當(dāng)前數(shù)據(jù)狀態(tài)下的業(yè)務(wù)規(guī)則。根據(jù)業(yè)務(wù)規(guī)則中聲明的執(zhí)行邏輯,對(duì)當(dāng)前數(shù)據(jù)對(duì)象執(zhí)行對(duì)應(yīng)的操作。
注:本文中所涉及到的圖表、注解、公式等內(nèi)容請(qǐng)以PDF格式閱讀原文。