規則引擎開發經驗分享 - reddit

banq發表於2022-02-16

背景。我在一個團隊中工作,負責管理一堆不同的規則引擎。其中一個是純粹的Java麵條,只有開發它的人明白,另一個是在一個專有的BRMS系統上執行,有數萬條規則,還有一個是我開發的,是一個決策表系統。

在建立一個規則引擎時,你能做的最重要的事情就是限制它的功能。在你的例子中,你應該至少有三個獨立的規則引擎:一個做賬戶邏輯,一個檢查產品可用性,另一個尋找客戶賬戶問題。這將有助於限制可能出現的義大利麵條。

你能做的第二件最重要的事是確保每條規則都能被測試、重構,並且你能為這套規則提供保證。為此,我建議避免使用執行規則的單獨語言。它可能很強大,但它們可能是測試的噩夢,而且專門的規則語言通常沒有主流語言那麼好的工具。如果你使用像決策表這樣的東西,那麼驗證輸入和正確地將其轉化為你自己程式碼中的類就容易多了。

最後,我建議在你的規則中防止任何形式的狀態或排序。如果你需要在各輪執行之間保持狀態,你很可能實際上是在談論不同型別的規則,例如,建立不同的規則集來確定客戶是否可以下訂單(布林輸出),以及另一個規則集來確定他們得到的信貸金額(小數輸出),而不是把它們放在一起,用0來表示客戶不能下訂單。

相關文章