分享好友 最新动态首页 最新动态分类 切换频道
3. Drools入门案例
2024-12-27 05:13

通过上图可以看到,用户录入的个人信息包括姓名、性别、年龄、学历、电话、所在公司、职位、月收入、是否有房、是否有车、是否有信用卡等。录入完成后点击申请按钮提交即可。

3. Drools入门案例

用户提交申请后,需要在系统的服务端进行用户信息合法性检查(是否有资格申请信用卡),只有通过合法性检查的用户才可以成功申请到信用卡(注意:不同用户有可能申请到的信用卡额度不同)。

检查用户信息合法性的规则如下

规则编号名称描述1检查学历与薪水1如果申请人既没房也没车,同时学历为大专以下,并且月薪少于5000,那么不通过2检查学历与薪水2如果申请人既没房也没车,同时学历为大专或本科,并且月薪少于3000,那么不通过3检查学历与薪水3如果申请人既没房也没车,同时学历为本科以上,并且月薪少于2000,同时之前没有信用卡的,那么不通过4检查申请人已有的信用卡数量如果申请人现有的信用卡数量大于10,那么不通过

用户信息合法性检查通过后,还需要根据如下信用卡发放规则确定用户所办信用卡的额度

规则编号名称描述1规则1如果申请人有房有车,或者月收入在20000以上,那么发放的信用卡额度为150002规则2如果申请人没房没车,但月收入在10000~20000之间,那么发放的信用卡额度为60003规则3如果申请人没房没车,月收入在10000以下,那么发放的信用卡额度为30004规则4如果申请人有房没车或者没房但有车,月收入在10000以下,那么发放的信用卡额度为50005规则5如果申请人有房没车或者是没房但有车,月收入在10000~20000之间,那么发放的信用卡额度为8000

思考:如何实现上面的业务逻辑呢

我们最容易想到的就是使用分支判断(if else)来实现,例如通过如下代码来检查用户信息合法性:

 

如果用户信息合法性检查通过后,还需要通过如下代码确定用户所办信用卡的额度

 

通过上面的伪代码我们可以看到,我们的业务规则是通过Java代码的方式实现的。这种实现方式存在如下问题

1、硬编码实现业务规则难以维护

2、硬编码实现业务规则难以应对变化

3、业务规则发生变化需要修改代码,重启服务后才能生效

那么面对上面的业务场景,还有什么好的实现方式吗

答案是规则引擎。

规则引擎,全称为业务规则管理系统,英文名为BRMS(即Business Rule Management System)。规则引擎的主要思想是将应用程序中的业务决策部分分离出来,并使用预定义的语义模块编写业务决策(业务规则,由用户或开发者在需要时进行配置、管理。

需要注意的是规则引擎并不是一个具体的技术框架,而是指的一类系统,即业务规则管理系统。目前市面上具体的规则引擎产品有:drools、VisualRules、iLog等。

规则引擎实现了将业务决策从应用程序代码中分离出来,接收数据输入,解释业务规则,并根据业务规则做出业务决策。规则引擎其实就是一个输入输出平台。

上面的申请信用卡业务场景使用规则引擎后效果如下

系统中引入规则引擎后,业务规则不再以程序代码的形式驻留在系统中,取而代之的是处理规则的规则引擎,业务规则存储在规则库中,完全独立于程序。业务人员可以像管理数据一样对业务规则进行管理,比如查询、添加、更新、统计、提交业务规则等。业务规则被加载到规则引擎中供应用系统调用。

使用规则引擎的优势如下

1、业务规则与系统代码分离,实现业务规则的集中管理

2、在不重启服务的情况下可随时对业务规则进行扩展和维护

3、可以动态修改业务规则,从而快速响应需求变更

4、规则引擎是相对独立的,只关心业务规则,使得业务分析人员也可以参与编辑、维护系统的业务规则

5、减少了硬编码业务规则的成本和风险

6、使用规则引擎提供的规则编辑工具,使复杂的业务规则实现变得的简单

对于一些存在比较复杂的业务规则并且业务规则会频繁变动的系统比较适合使用规则引擎,如下

1、风险控制系统----风险贷款、风险评估

2、反欺诈项目----银行贷款、征信验证

3、决策平台系统----财务计算

4、促销平台系统----满减、打折、加价购

drools是一款由JBoss组织提供的基于Java语言开发的开源规则引擎,可以将复杂且多变的业务规则从硬编码中解放出来,以规则脚本的形式存放在文件或特定的存储介质中(例如存放在数据库中),使得业务规则的变更不需要修改项目代码、重启服务器就可以在线上环境立即生效。

drools官网地址:https://drools.org/

drools源码下载地址:https://github.com/kiegroup/drools

在项目中使用drools时,即可以单独使用也可以整合spring使用。如果单独使用只需要导入如下maven坐标即可

org.drools drools-compiler 7.6.0.Final 如果我们使用IDEA开发drools应用,IDEA中已经集成了drools插件。如果使用eclipse开发drools应用还需要单独安装drools插件。

本小节通过一个Drools入门案例来让大家初步了解Drools的使用方式、对Drools有一个整体概念。

3.1 业务场景说明
业务场景:消费者在图书商城购买图书,下单后需要在支付页面显示订单优惠后的价格。具体优惠规则如下

规则编号名称描述1规则1所购图书总价在100元以下的没有优惠2规则2所购图书总价在100到200元的优惠20元3规则3所购图书总价在200到300元的优惠50元4规则4所购图书总价在300元以上的优惠100元

现在需要根据上面的规则计算优惠后的价格。

第一步:创建maven工程drools_quickstart并导入drools相关maven坐标

 

第二步:根据drools要求创建resources/META-INF/kmodule.xml配置文件

 

注意:上面配置文件的名称和位置都是固定写法,不能更改

第三步:创建实体类Order

 

第四步:创建规则文件resources/rules/bookDiscount.drl

 

第五步:编写单元测试

 

通过上面的入门案例我们可以发现,使用drools规则引擎主要工作就是编写规则文件,在规则文件中定义跟业务相关的业务规则,例如本案例定义的就是图书优惠规则。规则定义好后就需要调用drools提供的API将数据提供给规则引擎进行规则模式匹配,规则引擎会执行匹配成功的规则并将计算的结果返回给我们。

可能大家会有疑问,就是我们虽然没有在代码中编写规则的判断逻辑,但是我们还是在规则文件中编写了业务规则,这跟在代码中编写规则有什么本质的区别呢

我们前面其实已经提到,使用规则引擎时业务规则可以做到动态管理。业务人员可以像管理数据一样对业务规则进行管理,比如查询、添加、更新、统计、提交业务规则等。这样就可以做到在不重启服务的情况下调整业务规则。

3.3.1 规则引擎构成

drools规则引擎由以下三部分构成

  • Working Memory(工作内存
  • Rule Base(规则库
  • Inference Engine(推理引擎

其中Inference Engine(推理引擎)又包括

  • Pattern Matcher(匹配器) 具体匹配哪一个规则,由这个完成
  • Agenda(议程)
  • Execution Engine(执行引擎

如下图所示

3.3.2 相关概念说明

Working Memory:工作内存,drools规则引擎会从Working Memory中获取数据并和规则文件中定义的规则进行模式匹配,所以我们开发的应用程序只需要将我们的数据插入到Working Memory中即可,例如本案例中我们调用kieSession.insert(order)就是将order对象插入到了工作内存中。

Fact:事实,是指在drools 规则应用当中,将一个普通的JavaBean插入到Working Memory后的对象就是Fact对象,例如本案例中的Order对象就属于Fact对象。Fact对象是我们的应用和规则引擎进行数据交互的桥梁或通道。

Rule Base:规则库,我们在规则文件中定义的规则都会被加载到规则库中。

Pattern Matcher:匹配器,将Rule Base中的所有规则与Working Memory中的Fact对象进行模式匹配,匹配成功的规则将被激活并放入Agenda中。

Agenda:议程,用于存放通过匹配器进行模式匹配后被激活的规则。

Execution Engine:执行引擎,执行Agenda中被激活的规则。

3.3.3 规则引擎执行过程

通过上面的核心API可以发现,大部分类名都是以Kie开头。Kie全称为Knowledge Is Everything,即"知识就是一切"的缩写,是Jboss一系列项目的总称。如下图所示,Kie的主要模块有OptaPlanner、Drools、UberFire、jBPM。

最新文章
淘客创业秘籍:解锁服务费、程序APP与引流策略,打造专属返利帝国!
:在电商浪潮中,淘客作为连接消费者与商家的重要桥梁,正以其独特的商业模式吸引着无数创业者的目光。本文将深入探讨淘客服务费的计算逻辑、淘客程序APP的核心价值、高效引流方法以及如何定制开发淘客联盟平台和店铺淘客软件,为有志于淘客
张庭复出直播:不卖面膜卖锅碗瓢盆,7小时销售267万,没进前十名
“曾经的微商女王,怎么卖起了锅碗瓢盆?”12月10日,44岁的张庭再度出山,开启了自己新一轮的直播带货。可让人没想到的是,曾经在化妆品领域常年稳居第一的张庭;这一次却换了新的赛道,卖起了锅碗瓢盆等生活用品。在直播间声嘶力竭7小时
智东西早报:搜狗递交赴美IPO申请;特斯拉召回万辆ModelX
「智东西」晚报第765期2017.10.14 周六#今日要闻#1、搜狗递交纽交所IPO申请 王小川占股5.5%搜狗周五向美国证券交易委员会(SEC)提交了IPO(首次公开招股)招股书。招股书显示,搜狗计划通过首次公开招股募集最高6亿美元资金。搜狗计划在纽
上海戏剧学院继续教育学院《艺术×AI(首期)人工智能辅助艺术创作实训班》 正式开课
《艺术×AI(首期)人工智能辅助艺术创作实训班》正式开班2024年7月7日,上海戏剧学院继续教育学院在红楼举行了《艺术×AI(首期)人工智能辅助艺术创作实训班》的开课仪式,该课程旨在培养学员们在AI技术与艺术创作方面的综合能力。开课仪
百度蜘蛛池租用:揭秘SEO蜘蛛池破解版,背后的真相与风险
揭秘百度蜘蛛池租用中的SEO蜘蛛池破解版,揭示其背后的真实运作与潜在风险。该破解版虽能降低成本,但可能存在安全漏洞、法律法规风险,以及损害搜索引擎优化效果的问题。用户需谨慎对待,以免造成不必要的损失。本文目录导读:SEO蜘蛛池破
网站搜索引擎优化的5个步骤
  1、分析关键词  关键词的关注量分析、竞争对手用词分析、关键词相关性分析、关键词密度、关键词布局以及排名预测。就比如在百度上搜索制砂机河南中矿后看百度收录了多少篇相关内容,再用关键词分析工具查相关网站在制砂机河南中矿的
陕西单招学校排名榜(陕西高职单招院校名单及院校排名榜)
今天大学科目网小编整理了陕西单招学校排名榜(陕西高职单招院校名单及院校排名榜)相关信息,希望在这方面能够更好的大家。1、陕西单招学校排名榜2、陕西高职单招院校名单及院校排名榜3、西安现代职业高中是公办还是民办? 1、陕西邮电职
漫蛙manwa漫画免费无广告版下载最新
漫蛙manwa漫画免费无广告版一款实用的漫画阅读软件。用户可以在app上下载免费的、无病毒、无广告的版本,给用户提供了一个安全、干净的阅读环境,可以通过输入关键词进行查询,轻松找到自己喜欢的漫画资源,还可以在社区中发表自己对某部漫
明星家里挂什么画?这可能是目前最全最实用的装饰画、照片墙攻略!
欢迎随时勾搭PC酱微信(微信号pclady2016)前些天姚晨在微博上直播做红烧肉,她一件白T恤,扎着清爽马尾,怀二胎的小腹微微隆起。同时姚晨也介绍了自己家中的陈设,房子看起来面积不是很大,装修十分温馨,完全没有其他明星豪宅的豪华气派。
程序员​必备的5款提升效率的实用AI代码工具
随着AI技术的不断发展,AI在编写代码方面的能力也日益强大。适当使用AI的能力能够显著提高代码编写的效率和质量,解放程序员的双手。今天给大家介绍5款程序员必备的AI代码工具。01GitHub Copilothttps://docs.github.com/en/copilotGitHub
相关文章
推荐文章
发表评论
0评