背景:
使軟件可維護(hù),適應(yīng)業(yè)務(wù)變化不要經(jīng)常改代碼砌们。
在沒(méi)有規(guī)則引擎的時(shí)代巧鸭,有些邏輯比較復(fù)雜的業(yè)務(wù),只有不斷的增添if-else去滿足我們這個(gè)復(fù)雜的業(yè)務(wù)場(chǎng)景撰洗,對(duì)于開(kāi)發(fā)者來(lái)說(shuō)還好荆陆,對(duì)于后面接手的同學(xué)一看到處都是if-else措拇。
類(lèi)型:
一般來(lái)說(shuō)分為下面三類(lèi):
? 低配版:沒(méi)有配置界面,靠業(yè)務(wù)人員編寫(xiě)引擎規(guī)則DSL慎宾,一般存儲(chǔ)在數(shù)據(jù)庫(kù)或者文件中,這種沒(méi)有徹底解放業(yè)務(wù)人員和開(kāi)發(fā)人員的耦合浅悉,但是加快了業(yè)務(wù)代碼的上線速度趟据,以及很容易就能進(jìn)行規(guī)則變更。
? 進(jìn)階版:這個(gè)一般是某種特定的系統(tǒng)术健,我們針對(duì)這種系統(tǒng)設(shè)置一些有針對(duì)性的頁(yè)面汹碱,比如下面是某風(fēng)控系統(tǒng)的截圖,風(fēng)控系統(tǒng)的規(guī)則引擎是相對(duì)來(lái)說(shuō)比較簡(jiǎn)單的荞估,只需要判斷某些參數(shù)是否符合某些條件即可咳促,然后返回固定的值即可。
? 完全版:在進(jìn)階版中規(guī)則引擎只是其中的一個(gè)部件勘伺,一般這種都很難復(fù)用于其他場(chǎng)景跪腹。但是一個(gè)完全版的規(guī)則引擎,追求的超高的通用性飞醉,下面是從一個(gè)商業(yè)的規(guī)則引擎中截圖:
可以看見(jiàn)提供了多種規(guī)則引擎的表達(dá):比如決策集冲茸,決策表,決策樹(shù)等等缅帘,適用于我們很多需要使用規(guī)則引擎的地方轴术,下面暫時(shí)了一下決策樹(shù)的配置,這個(gè)就和我們上面風(fēng)控的配置有點(diǎn)類(lèi)似钦无,只不過(guò)通用性更強(qiáng)逗栽。
講到這里基本上規(guī)則引擎是什么大家基本上心里面有個(gè)大概了,下面我們來(lái)講下有哪些開(kāi)源的規(guī)則引擎失暂。
有哪些規(guī)則引擎
在社區(qū)中開(kāi)源的規(guī)則引擎是比較多的彼宠,說(shuō)明不同的業(yè)務(wù)團(tuán)隊(duì),公司都對(duì)這個(gè)是比較看中的弟塞,但是整體上大的分類(lèi)分為下面幾類(lèi):
? 通過(guò)界面配置的成熟規(guī)則引擎:這種規(guī)則引擎相對(duì)來(lái)說(shuō)就比較重兵志,但是因?yàn)楣δ苋灿胁糠謽I(yè)務(wù)會(huì)選擇這個(gè)宣肚,一般出名的有:drools,urule想罕。
? 基于jvm腳本語(yǔ)言:這種其實(shí)不是一個(gè)成熟的規(guī)則引擎,他應(yīng)該算是規(guī)則引擎中的核心技術(shù),有很多公司比如美團(tuán)按价,他會(huì)覺(jué)得drools這種太重了惭适,然后會(huì)基于一些jvm的腳本語(yǔ)言,去自己開(kāi)發(fā)一個(gè)輕量級(jí)的規(guī)則引擎楼镐,這里比較出名的有癞志,groovy,aviator,qlexpress。
? 基于java代碼的規(guī)則引擎:上面是基于jvm腳本語(yǔ)言去做的框产,會(huì)有一些語(yǔ)法學(xué)習(xí)的成本凄杯,所以就有基于java代碼去做的規(guī)則引擎,比如通過(guò)一些注解實(shí)現(xiàn)抽象的方式去做到規(guī)則的擴(kuò)展秉宿,比較出名的有: easyRules戒突。
成熟的規(guī)則引擎
作為完全版的成熟的規(guī)則引擎,往往可以當(dāng)作sass產(chǎn)品進(jìn)行售賣(mài)描睦,urule再開(kāi)源部分的同時(shí)膊存,也再賣(mài)著自己的高級(jí)功能,drools是一個(gè)純開(kāi)源的產(chǎn)品忱叭,如果想體驗(yàn)這種規(guī)則引擎可以直接去urule.bstek可以體驗(yàn)他的產(chǎn)品隔崎,不需要自行搭建。
作為完全版到底是怎么滿足各種奇奇怪怪的規(guī)則場(chǎng)景呢韵丑?在這些規(guī)則引擎里面都會(huì)分為好幾種規(guī)則設(shè)計(jì)器來(lái)滿足你想要的規(guī)則場(chǎng)景:
? 規(guī)則集:一組普通規(guī)則和循環(huán)規(guī)則構(gòu)成的規(guī)則集合爵卒,是使用頻率最高的一種業(yè)務(wù)規(guī)則實(shí)現(xiàn)方式。一般分為向?qū)剑和ㄟ^(guò)圖形界面構(gòu)成的撵彻;還有腳本式:通過(guò)自定義的DSL語(yǔ)言技潘,類(lèi)似我們下面會(huì)講的jvm腳本規(guī)則引擎一樣。