摘要:比如對一個企業進行信用評級,涉及三個維度企業年齡企業注冊資本與企業法人年齡。增加判斷如果是將三個業務的判斷放在一個規則當中,那么對對象為的情況就需要特殊處理了。
問題場景
在技術交流群(QQ:715840230)中有同學提出這樣的問題:
往kiesession里面傳入fact,如果不做輸入檢查fact里面有些字段可能是null值。但是如果在外面做輸入檢查,規則一改,fact所需要的字段不一樣了,輸入檢查也要跟著改,耦合比較強。有沒有比較好的方法呢?問題解答
其實針對這種問題與規則引擎的關系不大,比較重要的還是要看業務邏輯。
比如對一個企業進行信用評級,涉及三個維度:企業年齡、企業注冊資本與企業法人年齡。當然,在這個例子中各項值暫定為都是越高所得的評定分值越高。
就這個例子來解答一下上面的問題。從兩個維度來講:
減少耦合如果想真正的減少耦合,那么可將三個維度的進行拆分,不放在一個fact對象中傳入,而是三個規則,每個規則都計算對應的值,最終將結果逐個相加。使用這種方案,便不存在fact值為null的問題。
增加判斷如果是將三個業務的判斷放在一個規則當中,那么對fact對象為null的情況就需要特殊處理了。比如在when中我們只獲取類型為企業的fact對象,而不具體限定條件。這樣只要是企業對象進入,都會被規則匹配,而具體的分值計算放在then部分進行處理。
還有一種情況就是限定條件通過自定義一些函數來進行處理,比如獲得fact對象之后將通過自定義的函數將其處理成預期的結果,然后再在then中做匯總。
其他方法那么,針對那位同學的問題,他想通過在插入fact對象之前進行校驗排查,這其實是一種選擇,選擇默認屬性為null的值的得分為0。針對他的這項疑惑,本人在交流群中給出的解答為:
不傳這個值或忽略這個值,其實就是對這個值的一種處理。同樣的,在規則中也可以這樣處理,而且更靈活的處理。比如這個打分,如果某一項不傳,那默認可能這一項就是0分,但如果傳了null值,你可以在規則中對null進行處理,設置為0,你甚至還可以對null值進行處理,設置成負數。相關技術視頻
CSDN學院:《Drools7規則引擎進階教程》
CSDN學院:《Drools7規則引擎入門教程》
CSDN學院:《Drools7系列優惠套餐》
原文鏈接:http://www.choupangxia.com/20...
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/75611.html
摘要:今天這批文章就帶大家了解一下規則引擎中比較操作符之一的。對象類代碼調用規則引擎代碼歡迎張三歡迎張三張三規則代碼,這里模擬了兩種場景的規則判斷規則觸發規則觸發執行結果規則觸發規則觸發 場景 規則引擎技術討論2群(715840230)有同學提出疑問,memberOf的使用過程中如果,memberOf之后的參數不是集合也不是數組,而是格式如1,2,3,4的字符串,那么Drools是否會講其轉...
摘要:規則引擎集合相關處理在實際生產過程中,有很多關于集合的處理場景,比如一個對象中包含有一個集合,而需要判斷該集合是否包含某個值。而規則引擎也提供了多種處理方式,比如通過等進行操作,比較。然后,通過關鍵字來遍歷中的值,獲得符合條件的。 規則引擎集合相關處理 在實際生產過程中,有很多關于集合的處理場景,比如一個Fact對象中包含有一個集合,而需要判斷該集合是否包含某個值。而Drools規則引...
摘要:問題場景在使用規則引擎時,有朋友會遇到這樣的問題,就是在部分判斷的兩個參數都是集合類型,比如兩個,此時要判斷一個集合是否包含另外一個集合的內容。 問題場景 在使用Drools規則引擎時,有朋友會遇到這樣的問題,就是在when部分判斷的兩個參數都是集合類型,比如兩個List,此時要判斷一個集合是否包含另外一個集合的內容。 拿一個具體的例子來說明,我的公眾號《程序新視界》接受商務合作有一定...
閱讀 2947·2023-04-25 22:16
閱讀 2093·2021-10-11 11:11
閱讀 3248·2019-08-29 13:26
閱讀 593·2019-08-29 12:32
閱讀 3410·2019-08-26 11:49
閱讀 2988·2019-08-26 10:30
閱讀 1939·2019-08-23 17:59
閱讀 1507·2019-08-23 17:57