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)传给规则做比较
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。