当前位置:网站首页>Drools(1):Drools简介
Drools(1):Drools简介
2022-07-23 19:11:00 【不死鸟.亚历山大.狼崽子】
1、某电商平台促销活动案例
活动规则是根据⽤户购买订单的⾦额给用户送相应的积分,购买的越多送的积分越多,用户可以使⽤积分来兑换相应的商品,我们这次活动的力度很⼤,肯定会吸引很多的⽤户参加,产品经理小王兴⾼采烈唾液横飞的对小明讲到。
⽤户购买的⾦额和对应送多少积分的规则如下:
100元以下, 不加分
100元-500元 加100分
500元-1000元 加500分
1000元 以上 加1000分⼩明⼀看,这需求果然简单呀,作为⼀个⼯作了两三年的程序员来讲,这不就是小case,半天搞定,送积分的⼼代码如下:
public void execute() throws Exception {
List<Order> orderList = getInitData();
for (int i=0; i<orderList.size(); i++){
Order order = orderList.get(i);
if (order.getAmout() <= 100){
order.setScore(0);
addScore(order);
}else if(order.getAmout() > 100 && order.getAmout() <= 500){
order.setScore(100);
addScore(order);
}else if(order.getAmout() > 500 && order.getAmout() <= 1000){
order.setScore(500);
addScore(order);
}else{
order.setScore(1000);
addScore(order);
}
}
} 上线运⾏了半天之后,财务部的⼩财突然监测到活动账户的⾦额⼤为减少,发现产品做活动竟然没有通 知到他,⾮常不爽,于是给领导⼩⻢说,这样⼤规模的活动,对公司财务有压⼒,领导⼩⻢权衡了⼀番说,这样吧活动继续,但是⾦额翻倍在送积分,于是规则变成了这样:200元以下不给积分,1000元以下给100积分…
⼩明看领导都发话了,没办法改呀,不过也简单,就是将⾥⾯的值都翻了倍,在投产上去,只是挨了不少测试的⽩眼。
活动⼜进⾏了⼀天,运营⼈员通过后台监控发现提到2倍以后,⽤户积极性变的很差,活动效果不理 想,和领导商议了⼀下,改为最初规则的1.5倍,及150元⼀下不给积分,750元以下给100积分…
没办法还得改不是,当然这次小明可学乖了,将这些数据(多少元送多少分)存到了数据库中,当⽼板再改主意的时候,只要改⼀下数据库的值就可以了,小明为⾃⼰的明聪明到有点小高兴。 核心代码编程了这样
public void execute() throws Exception {
List<Order> orderList = getInitData();
List<int> values = getTableValues();
for (int i=0; i<orderList.size(); i++){
Order order = orderList.get(i);
if (order.getAmout() <= values.get(0)){
order.setScore(values.get(3));
addScore(order);
}else if(order.getAmout() > values.get(0) && order.getAmout() <=
values.get(1)){
order.setScore(values.get(4));
addScore(order);
}else if(order.getAmout() > values.get(1) && order.getAmout() <=
values.get(2)){
order.setScore(values.get(5));
addScore(order);
}else{
order.setScore(values.get(6));
addScore(order);
}
}
} 正当小明得意洋洋的打了个最新版本投产上线之后,产品经理小王说积分规则层次太少了,由以 前的4组变成8组,小明此刻的心情:kao …
小明想这样下去非得被他们弄死,必须要找找有什么技术可以将活动规则和代码解耦,不管规则 如何变化,执行端不用动。小明搜了半天还真有这样的东⻄,那就是规则引擎,那么规则引擎到 底是什么东西呢?我们来看看。
2、规则引擎
规则引擎:全称为业务规则管理系统,英⽂名为BRMS(即Business Rule Management System)。规则引擎的主要思想是将应⽤程序中的业务决策部分分离出来,并使用预定义的语义 模块编写业务决策(业务规则),由用户或开发者在需要时进⾏配置、管理。 需要注意的是规则 引擎并不是⼀个具体的技术框架,而是指的⼀类系统,即业务规则管理系统。 目前市面上具体的 规则引擎产品有:drools、VisualRules、iLog等,使⽤最为⼴泛并且开源的是Drools。 规则引擎实现了将业务决策从应⽤程序代码中分离出来,接收数据输入,解释业务规则,并根据业务规 则做出业务决策。规则引擎其实就是⼀个输⼊输出平台。
规则引擎主要应用场景
对于⼀些存在⽐较复杂的业务规则并且业务规则会频繁变动的系统⽐较适合使⽤规则引擎,如下:
1、⻛险控制系统----⻛险贷款、⻛险评估
2、反欺诈项⽬----银⾏贷款、征信验证
3、决策平台系统----财务计算
4、促销平台系统----满减、打折、加价购
3、Drools介绍
drools是⼀款由JBoss组织提供的基于Java语⾔开发的开源规则引擎,可以将复杂且多变的业务规则从硬编码中解放出来,以规则脚本的形式存放在⽂件或特定的存储介质中(例如存放在数据库 中),使得业务规则的变更不需要修改项⽬代码、不⽤重启服务器就可以在线上环境⽴即⽣效。
drools官⽹地址 :https://drools.org/
drools源码下载地址 :https://github.com/kiegroup/drools
● 使⽤规则引擎能够解决什么问题? 针对复杂的业务规则代码处理,往往存在⼀下问题:
1、硬编码实现业务规则难以维护;
2、硬编码实现业务规则难以应对变化;
3、业务规则发⽣变化需要修改代码,重启服务后才能⽣效; 于是规则引擎Drools便诞⽣在项⽬ 中。。。
● 使⽤规则引擎的优势如下:
1、业务规则与系统代码分离,实现业务规则的集中管理
2、在不重启服务的情况下可随时对业务规则进⾏扩展和维护
3、可以动态修改业务规则,从⽽快速响应需求变更
4、规则引擎是相对独⽴的,只关⼼业务规则,使得业务分析⼈员也可以参与编辑、维护系统的业 务规则
5、减少了硬编码业务规则的成本和⻛险
6、使⽤规则引擎提供的规则编辑⼯具,使复杂的业务规则实现变得的简单
在项⽬中使⽤drools时,即可以单独使⽤也可以整合spring使⽤。如果单独使⽤只需要导⼊如下 maven坐标即可:
<dependency>
<groupId>org.drools</groupId>
<artifactId>drools-compiler</artifactId>
<version>7.6.0.Final</version>
</dependency>如果我们使⽤IDEA开发drools应⽤,IDEA中已经集成了drools插件。如果使⽤eclipse开发drools应⽤还 需要单独安装drools插件。
drools API开发步骤如下:

边栏推荐
- MySQL master-slave replication
- phar反序列化
- 2022山东老博会,山东养老展,中国国际养老服务业展9月举办
- 重装系统后故障(报错:reboot and select proper boot deviceor insert boot media in selected boot device)
- [development experience] development project trample pit collection [continuous update]
- Uncover the working principle of solid state disk
- Prepare for pressure test with JMeter and visualvw
- 千呼万唤,5G双卡双通到底有多重要?
- [ar learning] - II. Environment construction
- Reduced order method of linear algebraic determinant calculation method
猜你喜欢

BM14 链表的奇偶重排

梅科尔工作室-华为14天鸿蒙设备开发实战笔记五

Energy principle and variational method note 16: solution of virtual displacement principle

Mekol Studio - Little Bear Development Notes 2

scanf()和getchar()的用法讨论

Principe de l'énergie et méthode variationnelle note 19: principe de l'énergie résiduelle minimale + principe du travail possible

Compiler llvm MLIR introductions llvm backend instruction

MongoDB-查询语句中$exists以及结合$ne、$nin、$nor、$not使用介绍

Leetcode 151. invert words in strings

Leetcode 228. 汇总区间(可以,已解决)
随机推荐
20. Valid Parentheses有效的括号
Non local mean filtering / attention mechanism
多子系统多业务模块的复杂数据处理——基于指令集物联网操作系统的项目开发实践
2022 the fourth China International elderly care service industry exhibition was held in Jinan on September 26
AtCoder——Subtree K-th Max
Attack and defense world web question Fakebook
Energy principle and variational method note 18: virtual force principle
从200W超级闪充看iQOO 10 Pro的 “共情”能量
Uncover the working principle of solid state disk
2022DASCTF MAY
13. Roman to Integer罗马数字转整数
Typescript use of new data type symbol
Leetcode 238. product of arrays other than itself
能量原理与变分法笔记16:虚位移原理的求解
JDK安装包和Mysql安装包整理
Leetcode 219. duplicate Element II exists (yes, resolved)
Meiker Studio - Huawei 14 day Hongmeng equipment development practical notes 6
Home NAS server (3) | SSD cache acceleration mechanical hard disk
Energy principle and variational method note 12: minimum potential energy principle
能量原理与变分法笔记15:微元法的求解