什么是規(guī)則引擎?
所謂的規(guī)則引擎就是一組規(guī)則加上一組動(dòng)作, 當(dāng)某種規(guī)則被滿(mǎn)足后觸發(fā)某個(gè)動(dòng)作
業(yè)務(wù)痛點(diǎn)
多變的需求
產(chǎn)品的需求千變?nèi)f化,代碼需要不斷的修改
復(fù)雜的業(yè)務(wù)邏輯
由于需求和業(yè)務(wù)的復(fù)雜性,代碼中很可能會(huì)出現(xiàn)層層嵌套的if else語(yǔ)句, 每次修改代碼,都要仔細(xì)閱讀上下文, 所有的if else都要考慮,這顯然會(huì)增加開(kāi)發(fā)成本, 同時(shí)也很容易出錯(cuò)
臨時(shí)修改業(yè)務(wù)邏輯
如果產(chǎn)品需要臨時(shí)修改業(yè)務(wù)邏輯, 比如某一天使用一種特殊的業(yè)務(wù)邏輯, 之后又恢復(fù)正常, 沒(méi)有規(guī)則引擎的話(huà), 就需要進(jìn)行兩次發(fā)布, 大家都知道, 發(fā)布的成本是很高的, 需要 stop the world.
緊急修改業(yè)務(wù)邏輯
如果線(xiàn)上出現(xiàn)一些預(yù)想之外的場(chǎng)景, 需要緊急修改業(yè)務(wù)邏輯, 那么此時(shí)就需要進(jìn)行一次額外的發(fā)布, 對(duì)于大型項(xiàng)目的發(fā)布可能持續(xù)數(shù)個(gè)小時(shí), 期間無(wú)法對(duì)外提供服務(wù)
機(jī)器學(xué)習(xí), 動(dòng)態(tài)規(guī)則
假如我們的業(yè)務(wù)規(guī)則, 是通過(guò)機(jī)器學(xué)習(xí)來(lái)制定的, 支持動(dòng)態(tài)的調(diào)整規(guī)則, 那么硬編碼的方式顯然是不適合的
使用規(guī)則引擎解耦業(yè)務(wù)代碼
主要目的是將if else 從業(yè)務(wù)代碼中解耦出來(lái).
業(yè)務(wù)代碼中少不了if else語(yǔ)句, 當(dāng)業(yè)務(wù)簡(jiǎn)單固定的時(shí)候, 使用if else沒(méi)有任何問(wèn)題,如下所示:
if(a==0){
action1();
}
但是如果if語(yǔ)句層層嵌套的話(huà), 會(huì)讓業(yè)務(wù)邏輯很難看懂, 后面接手的開(kāi)發(fā)人員都不敢改這部分代碼,如下所示:
if (a == 0) {
action1();
} else {
if (b == 1) {
action2();
} else {
if (c==3){
if (d==4){
action3();
}
}
}
}
大家看到這部分代碼估計(jì)會(huì)想吐血, 即使是自己寫(xiě)的, 也會(huì)有種看不懂的感覺(jué), 當(dāng)我們引入規(guī)則引擎的時(shí)候, 就會(huì)變成下面這個(gè)樣子:
這樣通過(guò)規(guī)則引擎, 將規(guī)則抽離出來(lái), 這種規(guī)則就比層層嵌套的if else顯得更加直觀, 項(xiàng)目代碼的可讀性和可維護(hù)性將會(huì)大大提高
規(guī)則引擎適用的場(chǎng)景
積分規(guī)則
打碼平臺(tái)選擇
運(yùn)營(yíng)商資費(fèi)套餐
工資計(jì)算
績(jī)效指標(biāo)
為訂單選取最優(yōu)優(yōu)惠券
風(fēng)險(xiǎn)控制
預(yù)警系統(tǒng)
場(chǎng)景的主要特征, 本身業(yè)務(wù)邏輯的分支比較多, 錯(cuò)綜復(fù)雜, 并且這些規(guī)則在未來(lái)是可能或者很可能改變的, 引入規(guī)則引擎之后,可以通過(guò)修改規(guī)則來(lái)修改業(yè)務(wù)邏輯, 這會(huì)大大降低業(yè)務(wù)代碼的復(fù)雜性