1, 多變業(yè)務(wù)
開(kāi)發(fā)系統(tǒng)時(shí),有沒(méi)有試過(guò)下面的情況,如果你試過(guò),那可以考慮一下使用規(guī)則引擎了。
序號(hào) | 問(wèn)題 | 舉例 |
1 | 業(yè)務(wù)規(guī)則來(lái)自于一個(gè)或多個(gè)表格 | 商店的會(huì)員積分表,停車(chē)場(chǎng)的計(jì)費(fèi)標(biāo)準(zhǔn),快遞費(fèi)的計(jì)算表,客戶信用評(píng)分表 |
2 | 業(yè)務(wù)規(guī)則是客戶自己寫(xiě)的,難以結(jié)構(gòu)化。 | 工資計(jì)算辦法,生產(chǎn)配方計(jì)算,保險(xiǎn)計(jì)算,公式系統(tǒng)。 |
業(yè)務(wù)規(guī)則來(lái)自于表格,一般情況下表格有多個(gè)列,而這些列之間有條件和結(jié)果關(guān)系。如:
積分 | 會(huì)員等級(jí) | 打折 |
0-100 | 普通會(huì)員 | -- |
100-1000 | 白銀會(huì)員 | 0.99 |
1000-5000 | 黃金會(huì)員 | 0.9 |
5000~ | Vip | 0.85 |
這三列中,積分和會(huì)員等級(jí)就是條件,而打折往往就是結(jié)果,通常都是通過(guò)條件找到結(jié)果,上述表格可以用數(shù)據(jù)表保存起來(lái),但這個(gè)做法真不提倡,上表也許是用戶隨手搞的,可能過(guò)一兩個(gè)月就會(huì)變。
這些基于表格的規(guī)則,可以理解為結(jié)構(gòu)化的規(guī)則。
但用戶常常都會(huì)有非結(jié)構(gòu)化的規(guī)則要求軟件公司實(shí)現(xiàn)的,如上表,客戶增加如下要求:A,入黑名單的會(huì)員不打折,B,3月8日婦女節(jié),女會(huì)員折上折98,C,商品X不參與打折。
那就不是表格式的規(guī)則了,可以理解為非結(jié)構(gòu)化的規(guī)則。
事實(shí)上,非結(jié)構(gòu)化的規(guī)則,簡(jiǎn)直就是用戶隨手編寫(xiě)的公式,也許很多會(huì)員系統(tǒng)已經(jīng)處理了這些問(wèn)題,但對(duì)于小開(kāi)發(fā)團(tuán)隊(duì)或行業(yè)經(jīng)驗(yàn)還不夠豐富的團(tuán)隊(duì)來(lái)說(shuō),上面的要求就是“變態(tài)”,因?yàn)樽约簩?shí)現(xiàn)不了。
2,規(guī)則引擎
規(guī)則引擎就是為了處理復(fù)雜多變的業(yè)務(wù)而出現(xiàn)的,而把這些變化封裝到規(guī)則引擎中,提供通用的接口,讓實(shí)施人員或客戶在不改變低層代碼的前提下,可以比較簡(jiǎn)單地改變規(guī)則。
CKRule規(guī)則引擎并不是使用rete算法實(shí)現(xiàn)的,而是使用編譯,即規(guī)則都是代碼來(lái)實(shí)現(xiàn),基于.Net4.0的C#語(yǔ)言編寫(xiě)的。
上面的問(wèn)題,規(guī)則引擎都處理得非常好。對(duì)于表格式的數(shù)據(jù),可定義決策表進(jìn)行處理,對(duì)于非結(jié)構(gòu)化的規(guī)則,就直接編寫(xiě)公式來(lái)處理。對(duì)表格式數(shù)據(jù),需要先標(biāo)出條件列和結(jié)論列,引擎掃描每一行數(shù)據(jù),用條件列來(lái)判斷條件是否正確,如果成立就執(zhí)行結(jié)論列的數(shù)據(jù)。
而針對(duì)非結(jié)構(gòu)化的規(guī)則,開(kāi)發(fā)員可以在引擎中定義非常簡(jiǎn)化的關(guān)鍵字,對(duì)比邏輯和結(jié)論操作。并在業(yè)務(wù)系統(tǒng)調(diào)用這些定義,開(kāi)發(fā)出適合當(dāng)前業(yè)務(wù)系統(tǒng)的界面,提供友好,簡(jiǎn)單的公式編輯。在CKRule中,非結(jié)構(gòu)化規(guī)則被稱為客戶規(guī)則池,其架構(gòu)圖如下:

從上圖中,可以清楚看到,終端用戶始終在業(yè)務(wù)系統(tǒng)上面操作非結(jié)構(gòu)化的公式編輯,和測(cè)試編寫(xiě)的公式,保存之后被放在數(shù)據(jù)庫(kù)中,終端用戶是不需要與引擎直接接觸的,這一特點(diǎn)就是強(qiáng)大的客戶規(guī)則池功能。
即使你遇到再無(wú)厘頭的業(yè)務(wù)規(guī)則要求,都可以在引擎中編輯好基礎(chǔ)的元數(shù)據(jù),然后在你的業(yè)務(wù)系統(tǒng)中編輯公式。這些公式是使用C#編譯的,你可以非常簡(jiǎn)單地改變?nèi)魏螛I(yè)務(wù)規(guī)則。如果開(kāi)發(fā)員定義的關(guān)鍵字,比較邏輯和結(jié)論邏輯足夠完善或客戶公式足夠簡(jiǎn)單,那把客戶規(guī)則完全交給客戶來(lái)編寫(xiě),是絕對(duì)可行而且非常節(jié)約成本的事。
想了解CKRule的體系結(jié)構(gòu),案例和下載應(yīng)用,請(qǐng)查看:
http://www.ckrule.com/
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注