用户购买的金额和对应送多少积分的规则如下:
消费金额 | 赠送积分 |
---|---|
<100 | 0 |
100~500 | 100 |
500~1000 | 200 |
>=1000 | 300 |
简单硬编码实现
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分等
- 简化if else 结构,让业务逻辑和数据 分离
- 分离出的业务逻辑必须要易于编写,至少单独编写这些业务逻辑要比写代码快
- 分离出的业务逻辑必须要比原来的代码更容易读懂
- 是一种嵌入在应用程序中的组件,实现了将业务决策从应用程序代码中分离出来
- 规则引擎和流程引擎一起,是使用在大规模复杂业务场景下必备的业务框架技术,使用这两门技术搭建起来的系统能够很好的梳理清楚业务逻辑,并且方便快速的修改业务逻辑,甚至可以做到需求的实时生效
目标:建立规则语言标准,动态编辑,自动化执行。
- -规则管理的复杂性
- 优先级问题:如券类型问题,购买50元商品,有30减10元、满50减20元 系统优先使用哪个规则
- 冲突问题:如有10条法律规定,如谋杀会判死刑,未成年不能判死,这种情况系统对未成年谋杀如何判定。
- 规则列表的选择问题:很多时候,这可能是只是个规则管理的业务模型问题,但设计出一套足够应对所有业务场景的模型还是非常难的。
-
面向运营人员的规则 的页面配置化
-
规则运行效率问题
JSR94 和rete算法