Drools規則引擎-若是Fact對象參數爲null如何處理

問題場景

在技術交流羣(QQ:715840230)中有同窗提出這樣的問題:session

往kiesession裏面傳入fact,若是不作輸入檢查fact裏面有些字段多是null值。可是若是在外面作輸入檢查,規則一改,fact所須要的字段不同了,輸入檢查也要跟着改,耦合比較強。有沒有比較好的方法呢?

問題解答

其實針對這種問題與規則引擎的關係不大,比較重要的仍是要看業務邏輯。函數

好比對一個企業進行信用評級,涉及三個維度:企業年齡、企業註冊資本與企業法人年齡。固然,在這個例子中各項值暫定爲都是越高所得的評定分值越高。.net

就這個例子來解答一下上面的問題。從兩個維度來說:視頻

減小耦合

若是想真正的減小耦合,那麼可將三個維度的進行拆分,不放在一個fact對象中傳入,而是三個規則,每一個規則都計算對應的值,最終將結果逐個相加。使用這種方案,便不存在fact值爲null的問題。對象

增長判斷

若是是將三個業務的判斷放在一個規則當中,那麼對fact對象爲null的狀況就須要特殊處理了。好比在when中咱們只獲取類型爲企業的fact對象,而不具體限定條件。這樣只要是企業對象進入,都會被規則匹配,而具體的分值計算放在then部分進行處理。教程

還有一種狀況就是限定條件經過自定義一些函數來進行處理,好比得到fact對象以後將經過自定義的函數將其處理成預期的結果,而後再在then中作彙總。get

其餘方法

那麼,針對那位同窗的問題,他想經過在插入fact對象以前進行校驗排查,這實際上是一種選擇,選擇默認屬性爲null的值的得分爲0。針對他的這項疑惑,本人在交流羣中給出的解答爲:io

不傳這個值或忽略這個值,其實就是對這個值的一種處理。一樣的,在規則中也能夠這樣處理,並且更靈活的處理。好比這個打分,若是某一項不傳,那默承認能這一項就是0分,但若是傳了null值,你能夠在規則中對null進行處理,設置爲0,你甚至還能夠對null值進行處理,設置成負數。

相關技術視頻

CSDN學院:《Drools7規則引擎進階教程》入門

CSDN學院:《Drools7規則引擎入門教程》進階

CSDN學院:《Drools7系列優惠套餐》

原文連接:http://www.choupangxia.com/20...

相關文章
相關標籤/搜索