Drools的自我小草稿

Drools是什么?做什么的?

我先用一个案例来说明:

QQ欢乐斗地主 每日签到领奖励
如果第一天的奖励,后面在我增加奖励的时候,我怎么把奖励又分给对应的签到天数上面去呢。

1、用代码来控制,代码里面写很多 if-else

1
2
3
4
5
6
if(第一天签到){
// 领取奖励 a
}else if(第二天签到){
// 领取奖励 b
}
... 第三天,第四天,...

如果这样的话,我需要修改的时候,就需要进行重新发布。能不能进行动态更新呢。

2、你可以把规则和代码进行隔离,就避免了第一种问题。
每次要签到的时候,都读取一下规则,如果规则改变,那么签到的逻辑也进行改变。

在这里插入图片描述
最重要的是什么,这个规则的变化,是业务人员驱动的。

这个规则库,如果业务人员可以根据自己的需求来调整,来修改,岂不美哉!
(可能业务觉得,斗地主第一天不应该送 300 豆,应该送 1000豆。)

小结:说了那么多,其实就是 Drools 就是做这个的,应该 规则引擎框架。

Drools 的使用,引入 maven 依赖,使用它们的 api 来执行调用规则即可。

规则写在哪里呢?可以写在本地,或者可以写在数据库。

Drools 可以读取到这些内容,来进行加载,匹配,再执行。

视频感悟

物流,个人所得税

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
rule “随便定义,字符串就行”
activation-group "组名" # 同一个组,只能匹配一个
salience int #值越大,越先匹配(注意优先级控制)
when
条件(参数) => 不同条件(多个rule)
then
计算 => 相同逻辑,封装了函数(function,service)


-------------------------------


rule
salience int # 控制优先级
date-effective "2022-02-26" # 优先级最高的来进行控制
no-loop true # 防止 update 死循环
when
$xxx: # 接收
then
计算
$xxx.set # 此时内存中不生效的
update($xxx) # 更新内存(后面的才能用)