Drools是一款基于Java的開源規則引擎,全稱為業務規則管理系統,實現了將業務決策從應用程序中分離出來。
什么場景下需要使用Drools
信用卡申請
比如說辦信用卡,年齡、學歷、薪水、和是否有車和房,這些數據會作為用戶是否有申請資格的判定條件,假如有三個規則如下:
規則一:既沒房也沒車,學歷大專以下,月薪少于5000,申請拒絕
規則二:既沒房也沒車,學歷大專以下,但月薪大于10000,申請通過
規則三:既沒房也沒車,學歷本科以上,月薪大于3500,小于5000,申請通過
審核通過后,又有三個規則規定發放申請額度:
規則一:學歷大專以下,月薪大于10000,額度10000
規則二:學歷本科以上,月薪小于5000,額度10000
規則三:學歷本科以上,月薪大于10000,額度15000
傳統實現方式,在業務代碼中需要植入大量if else判斷:
Public boolean check(User user){If(!user.isHouse && !user.isCar &&user.xueli<dazhuan && user.xinzi < 5000)Return false;Else if(!user. isHouse && !user.isCar &&user.xueli<dazhuan && user.xinzi >=1000)Return true;Else if(!user. isHouse && !user. isCar &&user.xueli>benke &&,3500<user.xinzi <5000)Return true;}
Public int check(User user){If(user.xueli<=dazhuan && user.xinzi >=10000)Return 10000;Else if(user.xueli>=benke && 3500<user.xinzi <5000)Return 10000;Else if(&user.xueli>=benke &&,user.xinzi >10000)Return 15000;}
如果人行出具新的金融政策,申請要求增加條件,那我們就必須修改或者新增if else的代碼。改這個代碼有三個弊端:
1、硬編碼實現業務規則代碼難以維護
2、硬編碼使業務代碼和規則高耦合,難以應對變化
3、業務規則一旦發生變化,就要修改代碼,重啟應用
面對上面的業務場景,有個好的實現方式就是drools規則引擎。
drools規則引擎的優勢:
1、業務規則和系統代碼分離
2、不重啟服務的情況下,可隨時對業務規則進行擴展和維護
3、減少硬編碼業務規則的成本和風險
4、規則實現變得更加清晰
drools實戰:
1、引入drools-compiler.jar
2、drools API開發步驟如下:
3、規則引擎主要包括三個方面:規則模板、基準數據、業務數據
1、規則模板
/***審核申請*/rule "pass_@{row.rowNumber}" no-loop true lock-on-active true salience 99 when user : User(xueli>("@{xueli}"), xinshui>("@{xinshui}"),isHouse.equals("@{isHouse}"), isCar.equals("@{isCar}")) thenSystem.out.println("user=" user); user.setPass(true);end
2、基準數據,通過ObjectDataCompiler.compile初始化到規則中;
3、業務數據fact,通過ksession.insert(fact)傳給規則做比較
版權聲明:本文內容由互聯網用戶自發貢獻,該文觀點僅代表作者本人。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如發現本站有涉嫌抄襲侵權/違法違規的內容, 請發送郵件至 舉報,一經查實,本站將立刻刪除。