業務規則引擎

什麼是業務規則?在需求裏面我們往往把約束,完整性,校驗,分支流等都可以算到業務規則裏面。在規則引擎裏面談的業務規則重點是談當滿足什麼樣的條件的時候,需要執行什麼樣的操作。因此一個完整的業務規則包括了條件和觸發操作兩部分內容。而引擎是事物內部的重要的運行機制,規則引擎即重點是解決規則如何描述,如何執行,如何監控等一系列問題。

對於快速軟件開發平臺往往會包括兩個方面的內容,一個是可重用性,一個是可配置性。對於公用組件,公用基礎類庫,公用算法等往往是增加了可重用性;而對於對象模型,權限模型,工作流模型,規則引擎則是解決平臺的高可配置性。

  • 權限模型實現了用戶崗位,角色和權限調整可配置。
  • 工作流引擎實現了在流程出現變化的時候可以靈活配置。
  • 規則引擎將業務決策也從程序代碼從抽離出來,實現規則變化也可以靈活配置。

在有了元數據模型,對象模型,工作流,權限,界面模型後。剩餘的兩個重點就是事件和規則,如果事件和規則能夠靈活配置和修改,規則本身又能夠很好的複用,則可實現一個較爲完整的快速開發平臺。
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
規則的定義和訪問

過去大部分的規則引擎開發並沒有規範化,有其自有的API,這使得其與外部程序交互集成不夠靈活。轉而使用另外一種產品時往往意味需要重寫應用程序邏輯和 API調用,代價較大。規則引擎工業中標準的缺乏成爲令人關注的重要方面。2003年11月定稿並於2004年8月最終發佈的JSR 94(Java規則引擎API)使得Java規則引擎的實現得以標準化。

JSR 94中沒有涉及用來創建規則和動作的語言.規則語言是規則引擎應用程序的重要組成部分,所有的業務規則都必須用某種語言定義並且存儲於規則執行集中,從而規則引擎可以裝載和處理他們。規則語言的詳情這裏不作詳細介紹,名稱及其網址列出如下:


多種規則語言的使用使得不同規則引擎實現之間的兼容性成爲問題.通用的規則引擎API或許可以減輕不同廠家API之間的問題,但公用規則語言的缺乏將仍然阻礙不同規則引擎實現之間的互操作性。儘管業界在提出公用規則語言上做出了一些努力, 比如說RuleML,SRML的出現,但距離獲得絕大部分規則引擎廠商同意的公用標準還有很長的路要走。

規則的執行

在規則的定義階段,會根據業務情況定義相應的規則,規則用規則語言描述。多個規則可以形成一組規則集合。而規則引擎的執行首先就是裝載一個規則集,對規則進行解析。同時根據規則推理引擎,將這些解析完成的規則執行到具體輸入的數據對象上。

當引擎執行時,會根據規則執行隊列中的優先順序逐條執行規則執行實例,由於規則的執行部分可能會改變工作區的數據對象,從而會使隊列中的某些規則執行實例因爲條件改變而失效,必須從隊列中撤銷,也可能會激活原來不滿足條件的規則,生成新的規則執行實例進入隊列。於是就產生了一種“動態”的規則執行鏈,形成規則的推理機制。這種規則的“鏈式”反應完全是由工作區中的數據驅動的。

規則條件匹配的效率決定了引擎的性能,引擎需要迅速測試工作區中的數據對象,從加載的規則集中發現符合條件的規則,生成規則執行實例。1982年美國卡耐基•梅隆大學的Charles L. Forgy發明了一種叫Rete的算法,很好地解決了這方面的問題。目前世界頂尖的商用業務規則引擎產品基本上都使用Rete算法。

規則引擎產品

Java規則引擎商業產品主要有(Jess/Visual Rules不是開源項目,它們可以免費用於學術研究,但用於商業用途則要收費)
 Vendor(廠商) Name(產品名稱)   Home Page(主頁) Jsr Compliance 
 ILOG JRules  http://www.ilog.com/products/jrules  jrules 4.6 passed 
Fair Isaac, Blaze Advisor  Blaze Advisor  http://www.fairisaac.com   
YASU Technologies  QuickRules  http://www.yasutech.com/products/index.htm  QuickRules 3.0 Beta passed 
PegaSystems  PegaRules Process Commander  http://www.pega.com   
Sandia Labs  Jess  http://herzberg.ca.sandia.gov/jess/  Jess 6.1p6 passed 
Kalstride  KRules  http://www.kalstride.com   
FlagLeader(旗正信息,國內唯一一家)  Visual Rules  http://www.flagleader.com   
 
開源項目的實現主要包括:
  • Drools - Drools規則引擎應用Rete算法的改進形式Rete-II算法。從內部機制上講,它使用了和Forgy的算法相同的概念和方法,但是增加了可與面嚮對象語言無縫連接的節點類型。
  • Mandarax 基於反向推理(歸納法)。能夠較容易地實現多個數據源的集成。例如,數據庫記錄能方便地集成爲事實集(facts sets),reflection用來集成對象模型中的功能。目前不支持JSR 94
  • OFBiz Rule Engine - 支持歸納法(Backward chaining).最初代碼基於Steven John Metsker的"Building Parsers in Java",不支持JSR 94
  • JLisa - JLisa是用來構建業務規則的強大框架,它有着擴展了LISP優秀特色的優點,比Clips還要強大.這些特色對於多範例軟件的開發是至關重要的.支持JSR 94
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章