崔歡歡 黃偉 舒江波
摘 要:目前大部分工資系統(tǒng)的計算方法采用硬編碼方式,與工資政策結(jié)合過于密切,系統(tǒng)適用性、重用性不高,更新維護困難。針對這一問題,提出了一種基于規(guī)則引擎的自適應(yīng)工資系統(tǒng)。首先,結(jié)合Drools規(guī)則引擎組件建立一個可執(zhí)行的規(guī)則庫,將規(guī)則庫與現(xiàn)實中的業(yè)務(wù)需求及政策一一對應(yīng);然后通過規(guī)則流控制規(guī)則的執(zhí)行,使其更靈活地適應(yīng)計算邏輯的變化,推動了工資系統(tǒng)的解耦合擴展和更新。根據(jù)規(guī)則引擎得到的規(guī)則文件,可經(jīng)自然語言處理作為規(guī)則文檔使用,極大降低了政策變化與系統(tǒng)功能同步更新難度,具有較高的實用價值。
關(guān)鍵詞:工資系統(tǒng);規(guī)則引擎;規(guī)則;規(guī)則流;適應(yīng)性
DOI:10.11907/rjdk.172889
中圖分類號:TP319
文獻標識碼:A 文章編號:1672-7800(2018)006-0102-04
Abstract:At present,hard-coding is adopted in most payroll system, it is too dependent on wage policy,which makes the system dificult to update and maintain.To slove this problem, this paper prensents a payroll system based on rules. First, we establish a executable rule base with the Drools rules engine components , the rule base corresponds to business requirements and policies; then, the execution of regular flow control rules can make it more flexible to adapt to the changes of calculation logic. It is proved that the system can promote the decoupling, the expansion and update of the salary system. In addition, the rule file can be changed into rule documents by natural language processing, which greatly reducing the policy change and system update difficulty, has a strong practical value.
Key Words:payroll system; rules engine; rule; rule flow; adaptability
0 引言
軟件行業(yè)發(fā)展至今,靈活性和適應(yīng)性愈加重要。設(shè)計模式、極限編程、敏捷軟件開發(fā)、Rup等,無一例外地強調(diào)了靈活和變化的重要性。
Drools是為Java量身定制的基于Charles Forgy的RETE算法規(guī)則實現(xiàn)[1],具有OO接口的RETE使商業(yè)規(guī)則有了更自然的表達,很多Java的應(yīng)用系統(tǒng)中已開始引入Drools規(guī)則引擎以提高系統(tǒng)適應(yīng)性。
本文以機關(guān)事業(yè)單位網(wǎng)絡(luò)工資管理系統(tǒng)開發(fā)為例,建立與工資政策相適應(yīng)的規(guī)則,減少硬編碼,實現(xiàn)編碼與規(guī)則的解耦合[2], 以規(guī)則庫對應(yīng)工資政策。通過對規(guī)則的管理和系統(tǒng)的重新設(shè)計,實現(xiàn)具有自適應(yīng)性的網(wǎng)絡(luò)工資管理系統(tǒng)。
1 相關(guān)技術(shù)
1.1 規(guī)則引擎
規(guī)則引擎[3]一直以來沒有明確定義,因為規(guī)則引擎的廣義定義使得規(guī)則引擎范圍很大,包括以任何形式使用并能應(yīng)用于生成數(shù)據(jù)結(jié)果的規(guī)則系統(tǒng)。本文的規(guī)則引擎是一種嵌入在應(yīng)用程序中的組件,它主要負責利用用戶抽取的業(yè)務(wù)邏輯,按預(yù)先定義好的語義編寫業(yè)務(wù)規(guī)則,執(zhí)行預(yù)定義流程,完成一定的檢測和執(zhí)行功能。同時規(guī)則引擎還提供一些輔助性插件,如繪制規(guī)則流插件、調(diào)試插件等。
Java規(guī)則引擎作為一個軟件插件,可管理和執(zhí)行業(yè)務(wù)規(guī)則、存儲規(guī)則,主要包括規(guī)則的語法形式、規(guī)則的組織形式、規(guī)則執(zhí)行前的標識中間形式以及規(guī)則執(zhí)行中的內(nèi)存申請管理,具有聲明式編程、邏輯和數(shù)據(jù)分開、性能高、集中表示知識、不用硬編碼等優(yōu)點。
1.2 Drool5.0介紹
1.2.1 業(yè)務(wù)規(guī)則
業(yè)務(wù)規(guī)則[4-5] (BusinessRule,簡稱BR)指包含一組條件和在此條件下執(zhí)行的操作,表示應(yīng)用程序的一段業(yè)務(wù)邏輯。Drools中每個規(guī)則結(jié)構(gòu)如圖1所示。
1.2.2 規(guī)則流
Drools提供了很多元素以控制規(guī)則的執(zhí)行順序,比如優(yōu)先級、Active-group等。如果項目越來越大,規(guī)則越來越復雜,單純靠優(yōu)先級和Active-group是很難維護的,Ruleflow可輕松地控制規(guī)則的執(zhí)行順序,類似工作流那樣,將規(guī)則集中、分批管理和組織。Ruleflow還提供了Join、Split、條件判斷等復雜條件。圖2是一個規(guī)則流例子[6]。
1.2.3 規(guī)則執(zhí)行
編寫完規(guī)則和規(guī)則流后,建立相應(yīng)的drl、rf 、rfm或xml文件,這些文件將由一個Antlr3 的文法解析器檢測是否存在錯誤。正確性檢測后建立一個規(guī)則描述descr的中間結(jié)構(gòu),文法解析器將descr傳入PackageBuilder 中,由它來打包生成Package[7-8]。規(guī)則執(zhí)行流程如圖3所示。
2 工資管理系統(tǒng)規(guī)則庫模型設(shè)計
2.1 工資管理系統(tǒng)中的規(guī)則
規(guī)則的分類思想較多,最具有代表性的是由James Odell提出的分類思想,該思想較為實用和全面。在對系統(tǒng)進行分析時,要對系統(tǒng)中的內(nèi)容進行分析,確定規(guī)則是表示對象與對象之間的關(guān)系,還是表示系統(tǒng)運算邏輯或是商業(yè)邏輯,區(qū)分情況進行管理。該思想將規(guī)則分為6類:
(1)條件型:這類規(guī)則用來限制對象所處環(huán)境,設(shè)置對象為真還是為假,比如WHEN……IF……ELSE。
(2)充分型:這類規(guī)則表示當且僅當?shù)臈l件,只有條件為真時才執(zhí)行,比如ONLY,IF。
(3)必要型:用例后置規(guī)則是表示用例執(zhí)行結(jié)果的規(guī)則,它只關(guān)心用例執(zhí)行的結(jié)果。比如:Finally。
(4)關(guān)聯(lián)關(guān)系型:對象約束規(guī)則表示對象與對象之間的關(guān)系,有一對多、多對一、多對多等,還包含依賴、集成、聚合等關(guān)系。
(5)推理型:推理顧名思義是由條件A滿足時需要經(jīng)過多個條件的比對才能得出結(jié)果。
(6)公式型:這類規(guī)則來自公式或算法的結(jié)果,比如:工資=基本工資+津貼+邊遠津貼-納稅。
2.2 系統(tǒng)規(guī)則流
規(guī)則流與工作流的區(qū)別在于解決問題的中心不一樣。如果流程經(jīng)常變化,建議用工作流,如果流程變化較少而流程中的內(nèi)容變化較大建議用規(guī)則流。一般規(guī)則流的變更并不頻繁,因此使用規(guī)則流。經(jīng)過分析后一旦決定就不輕易變化,對于有變化的內(nèi)容應(yīng)該盡量用規(guī)則來處理。系統(tǒng)規(guī)則流分層如圖4所示。
2.3 規(guī)則文件組織與管理
規(guī)則管理是整個工資系統(tǒng)的核心。對工資系統(tǒng)的業(yè)務(wù)模式、業(yè)務(wù)規(guī)則以及影響工資計算的各種參數(shù)作充分分析,并以此建立基礎(chǔ)構(gòu)建規(guī)則庫模型和基于規(guī)則庫的推理機制,同時將規(guī)則庫進行分類管理,實現(xiàn)規(guī)則的可配置管理。
2.3.1 規(guī)則的分類組織
工資系統(tǒng)依賴大量的政策文件,本文對政策文件進行分類管理,由規(guī)則包→規(guī)則文件→規(guī)則,由大到小進行分類和編號,提供規(guī)則管理界面,方便用戶修改規(guī)則和加入新的規(guī)則,見表1。
2.3.2 規(guī)則的沖突檢測與處理
沖突分為3種:①兩條規(guī)則條件中的關(guān)系運算完全相同;②兩條規(guī)則中的關(guān)系運算有交集而數(shù)值不同[7];③執(zhí)行規(guī)則中順序不當或混亂導致規(guī)則匹配出錯。本文對沖突處理的方式如圖5所示。
3 系統(tǒng)設(shè)計與建模
3.1 激活規(guī)則庫
Drools支持多種規(guī)則文件格式,如drl、dsl和xml等。其中,drl格式為Drools規(guī)則引擎的標準格式。Drl語法簡單,格式固定,屬性理解方便,因此可讀性較強。本文的所有規(guī)則文件均以drl文件的形式存儲,但是對于各類人員的規(guī)則,具體到某一個單位時,只會用到部分規(guī)則,因此本文用數(shù)據(jù)庫存儲可以激發(fā)的規(guī)則文件。某一條規(guī)則是否激活有兩種狀態(tài):已激活和未激活。
3.2 規(guī)則過濾器
工資計算時面對大量的規(guī)則,如何根據(jù)具體的人去選擇規(guī)則,僅僅靠規(guī)則引擎是不能完成的。它需要規(guī)則過濾器提取規(guī)則相關(guān)信息,檢測規(guī)則執(zhí)行時的沖突,處理沖突。同時規(guī)則過濾器還擔當規(guī)則的預(yù)處理,根據(jù)人員的相關(guān)信息選取可能匹配的規(guī)則等。規(guī)則過濾流程如圖6所示。
3.3 規(guī)則管理平臺
規(guī)則管理界面中,業(yè)務(wù)規(guī)則編碼是添加規(guī)則時自動生成的規(guī)則編號,這個規(guī)則編號蘊含規(guī)則的相關(guān)信息,是規(guī)則文件的唯一標識。規(guī)則名稱是規(guī)則的說明性名稱,以方便用戶理解規(guī)則,規(guī)則執(zhí)行狀態(tài)表示規(guī)則目前所處的狀態(tài),規(guī)則類別記錄了規(guī)則所屬人員的類別,創(chuàng)建時間是最后一次修改規(guī)則的時間。
4 結(jié)語
本文進行了如下研究:
(1)規(guī)則引擎與工資計算相結(jié)合。規(guī)則引擎是人工智能領(lǐng)域?qū)<蚁到y(tǒng)的應(yīng)用[9],與工資系統(tǒng)結(jié)合,提高了工資系統(tǒng)的智能性。
(2)根據(jù)jsr94語法規(guī)則,運用Drools插件[10]編寫了大量的工資系統(tǒng)相關(guān)政策文件規(guī)則,將工資政策直接與規(guī)則相關(guān),將計算流程直接與規(guī)則流相關(guān)。
(3)提供規(guī)則管理界面。管理員利用規(guī)則管理界面可以方便地查看規(guī)則、修改規(guī)則、添加規(guī)則、配置規(guī)則,以適應(yīng)新的政策變化。
(4)設(shè)置規(guī)則激活庫以適應(yīng)不同單位的需要,激活規(guī)則由管理員進行配置和激活。
(5)設(shè)計規(guī)則過濾器,實現(xiàn)了規(guī)則文件、規(guī)則流和具體人員結(jié)合,通過規(guī)則過濾器解決執(zhí)行時的沖突,調(diào)用規(guī)則流執(zhí)行。
(6)高可擴展性。基于規(guī)則的系統(tǒng)本身就具有很好的擴展性能,脫離硬編碼后,依賴規(guī)則的方式擴展時只需要加入新的規(guī)則即可。
有待進一步研究的內(nèi)容是:①規(guī)則沒有充分做到自然語言化,如果能做到自然語言化,那么規(guī)則的編輯與修改就會變得更加容易;②規(guī)則流管理基于Drools提供的myeclispe插件,因此規(guī)則流的修改還需要程序人員參與;③目前規(guī)則的生成,主要靠懂政策的人手動編寫,如果能設(shè)計一個通用的規(guī)則生成器用以生成規(guī)則,就會減少工作量,使規(guī)則編寫更加方便。
參考文獻:
[1] JOSEPH GIARRATANO,GARY RILEY.專家系統(tǒng):原理與編程[M].印鑒,譯.第4版.北京:機械工業(yè)出版社,2010.
[2] 何仁杰,梁冰.用規(guī)則引擎替代代碼[N].計算機世界,2004-01-19.
[3] Drools開發(fā)手冊[EB/OL]. http://down.51cto.com/data/473041.
[4] TONEY MORGAN.Business rules and information systems:aligning it with business goals[M].Boston:Addison-wesley Professional,2002:34-63.
[5] RONALD G ROSS.業(yè)務(wù)規(guī)則方法原理[M].北京:機械工業(yè)出版社,2004.
[6] Drools官網(wǎng)[EB/OL].http://drools.org/download/download.html.
[7] 張宇,陳德禮.基于Drools的策略體系設(shè)計[J].福建電腦,2007(10):11-12.
[8] 劉金龍.Drools規(guī)則引擎模式匹配效率優(yōu)化研究與實現(xiàn)[D].成都:西南交通大學,2016.
[9] 李春芳,譚慶平.面向業(yè)務(wù)的Drools規(guī)則引擎改進[J].計算機應(yīng)用與軟件,2015(5):20-23.
[10] 劉金龍.Drools規(guī)則引擎模式匹配效率優(yōu)化研究與實現(xiàn)[D].成都:西南交通大學,2015.
(責任編輯:杜能鋼)