初识规则引擎

  • 面临的问题

用户购买的金额和对应送多少积分的规则如下:

消费金额赠送积分
<1000
100~500100
500~1000200
>=1000300

简单硬编码实现

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);  
        }  
    }  
      
} 

后期需求变化

  • 消费金额区间变化对应奖励积分分值变化;
  • 对应消费区间增加积分增加其它限制条件;如:100~500分 如是金卡会员加100分,银卡加50分等

  • 如何解决

  1. 简化if else 结构,让业务逻辑和数据 分离
  2. 分离出的业务逻辑必须要易于编写,至少单独编写这些业务逻辑要比写代码快
  3. 分离出的业务逻辑必须要比原来的代码更容易读懂

  • 规则引擎的实际用途和价值

  1. 是一种嵌入在应用程序中的组件,实现了将业务决策从应用程序代码中分离出来
  2. 规则引擎和流程引擎一起,是使用在大规模复杂业务场景下必备的业务框架技术,使用这两门技术搭建起来的系统能够很好的梳理清楚业务逻辑,并且方便快速的修改业务逻辑,甚至可以做到需求的实时生效

  • 规则引擎的一般实现方式

目标:建立规则语言标准,动态编辑,自动化执行。


  • 规则引擎需要考虑的问题

  1. -规则管理的复杂性
  • 优先级问题:如券类型问题,购买50元商品,有30减10元、满50减20元 系统优先使用哪个规则
  • 冲突问题:如有10条法律规定,如谋杀会判死刑,未成年不能判死,这种情况系统对未成年谋杀如何判定。
  • 规则列表的选择问题:很多时候,这可能是只是个规则管理的业务模型问题,但设计出一套足够应对所有业务场景的模型还是非常难的。
  1. 面向运营人员的规则 的页面配置化

  2. 规则运行效率问题

JSR94 和rete算法


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值