規則引擎實現

2021-10-25 07:04:02 字數 2677 閱讀 6315

隨著業務的發展規則增加

隨著業務的複雜規則複雜

隨著業務的發展規則變化不會非常大(變化也存在侷限性)

實現的解決的問題:高復用、高靈活、可擴充套件、基礎方法更加簡單,實現誤區就為了高靈活性犧牲介面的效能。

建立 config package目錄,儲存每個規則對應的配置資訊,實現靈活性

@data

public

class

blackfilterconfig

extends

basefilterconfig

首先設定規則的執行器

public

abstract

class

abstractstrategyfilter

,blackitemid:{}"

,this

.getclass()

.get******name()

, json.

tojsonstring

(blackitemidlist));

if(collectionutils.

isempty

(blackitemidlist)

)/**

* 執行過濾

*/iteminfolist.

removeif

(i -

> blackitemidlist.

contains

(i.getitemid()

));}

/** * 按照配置獲取config

** @param positionenum

* @return

*/protected

abstract t getconfigbysource

(sourceenum source, list

iteminfolist)

;/**

* 收集待過濾集合

** @param config

* @return

*/protected

abstract list

collectfilteritemid

(t config, object vo)

;

繼承規則執行器實現每個規則,建立 rule package 新增規則**

public

class

blackfilter

extends

abstractstrategyfilter

/***按照 config 配置實現具體的**邏輯,收集待過濾的集合

*/@override

protected list

collectblackitemid

(blackfilterconfig config, userinfovo userinfovo)

return

newarraylist

<

>

(blacklist);}

}

設定全量規則之後,通過 choosefilter 的入參 source 執行篩選邏輯,選擇需要的規則去執行,針對規則有配置定製的情況可以使用每個規則的 config 配置資訊,然後再執行的時候直接使用即可。

@service

public

class

filterstrategyexecutorimpl

implements

filterstrategyexecutor

for(abstractstrategyfilter vo : filters)

", vo.

getclass()

.get******name()

);return;}

vo.dofilter

(positionenum, userinfovo, iteminfolist);}

catch

(exception e)

", vo.

getclass()

.get******name()

,e);}}

}/**

* 設定所有規則

** @return

*/private list

getfilters()

/** * 按照入參 sourceenum 篩選規則

** @param positionenum

* @return

*/private list

choosefilters

(sourceenum positionenum)

", filters.

size()

);return filters;

}}

此處的**有幾處可以按照需求進行優化

getfilters 方法可以通過資料庫的方式選擇需要進行 new ,減少無效的記憶體使用。

每個規則的配置資訊需要沒有和 filter 繫結在一起,現在 new blackfilter 的時候沒有設定 config 入參(額是打工人)

config 資訊最好和規則在一起通過資料庫全量獲取到,然後分發到每個規則中,減少配置資訊的獲取成本。

說明:如需要新增其他規則,直接新增繼承抽象類實現**,然後在getfilters 的時候新增到規則 list 中。

規則引擎實現生產排程系統

生產排程系統是製造企業 系統的重要組成部分,對應於生產管理系統的短期計畫安排,主要目標是通過良好的作業加工排序,最大限度減少生產過程中的準備時間,優化某一項或幾項生產目標,為生產計畫的執行和控制提供指導。在不同的問題環境中,生產排程的優化目標也不同。在生產製造企業中影響生產排程的因素很多 比如裝置 ...

mysql 規則引擎 為什麼使用規則引擎?

一天,朱斯參加了一場code review研討會。會上的一群人正在討論著如何對祖傳 進行變更,大家你一言,我一語,場面十分熱鬧!突然,只見人群中的乙個人滿面愁容,說道 昨天在專案中看到下面這樣一段 分支太多了!維護起來很煩啊!if day 周一 else if day 周二 else if day ...

規則引擎pyke

1.官網 2.安裝第三方包 pyenv global anaconda3 4.2.0 pip install htmltemplate 3.原始碼安裝pyke pyenv global anaconda3 4.2.0 cd pyke3 1.1.1 python setup.py build pyth...