Drools规则引擎介绍

排班中遇到的烦恼

排班最原始的需求是,RB一种规则,DB三种规则,AB一种规则。实现的方式是,先拿excel将排班的各种需求画出来。然后使用java代码实现。代码如下:

if(type.equals("RB")){
    复杂的代码逻辑
    此处省略一百行
}else if(type.equals("DB1")){
    复杂的代码逻辑
    此处省略一百行
}else if(type.equals("DB2")){
    复杂的代码逻辑
    此处省略一百行
}else if(type.equals("DB3")){
    复杂的代码逻辑
    此处省略一百行
}else if(type.equals("AB")){
    复杂的代码逻辑
    此处省略一百行
}

过了一段时间,需求变了,要求每周休息的日期不一样。绞尽脑汁,实现了我们每周休息日期不一样的需求。

又过了一段时间,需求又变了,要求RB又多了一种排班,以前是早中晚三班倒,现在是早晚两班倒。好吧,继续按照需求修改。

又过了一段时间,需求继续改动。。。

造成的结果是,代码越来愈复杂,修改以及维护起来越来越麻烦。因此,有必要找到一种技术可以将排班规则和代码解耦,不管规则如何变化,执行端不用动。

规则引擎

相关介绍

规则引擎是一种嵌套在应用程序种的组件,它实现了将业务规则从应用程序代码中分离出来,
使复杂的业务规则实现变得简单,也可以动态修改业务规则,从而快速的响应需求变更。

 

image.png

java开源的规则引擎有:Drools、Easy Rules、Mandarax、IBM ILOG。使用最为广泛并且开源的是Drools。

Drools 介绍

Drools 是一个基于Charles Forgy's的RETE算法的,易于访问企业策略、易于调整以及易于管理的开源业务规则引擎,符合业内标准,速度快、效率高。
业务分析师人员或审核人员可以利用它轻松查看业务规则,从而检验是否已编码的规则执行了所需的业务规则。

Drools 是用Java语言编写的开放源码规则引擎,使用Rete算法对所编写的规则求值。Drools允许使用声明方式表达业务逻辑。可以使用非XML的本地语言编写规则,从而便于学习和理解。并且,还可以将Java代码直接嵌入到规则文件中,这令Drools的学习更加吸引人。

Drools 优点

  • 简化系统架构,优化应用
  • 提高系统的可维护性和维护成本
  • 方便系统的整合
  • 减少编写“硬代码”业务规则的成本和风险

解决排班中的问题

drools有专门的规则语法drl,就是专门描述排班规则是如何执行的,按照RB排班规则需求规则如下:

arrangeRB.drl 文件内容


import com.chehejia.saos.brms.biz.rule.model.EmployeeDto;



function String pattern1(){
   String str = "{\"w1\":0,\"w2\":4 ,\"w3\":0 ,\"w4\":2 ,\"w5\":2 ,\"w6\":2,\"w7\":4 }&#
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值