JAVA规则引擎 - 调研分析设计搭建全过程<二>
自己做一个规则
为什么自己做一个规则
虽然市面上有许多成熟的规则引擎,但是为什么我们还要自己做一个规则。有几个问题,
- 第一是规则引擎到底在做什么事情,
- 第二是我们的目前业务可以不可直接用,
- 第三是怎么使用如果引入的第三方规则引擎出问题了能不能快速解决,
- 第四开源规则引擎学习的成本高不高,如果换了一个开发,能快速上手不
- 第五运维的操作是否适合业务人员使用
分析
一个规则引擎都需要什么:
1.需要基本逻辑,做条件判断
2.设置规则,规则引擎是以规则为核心
3.需要动态可配置,不然还需要修改代码,就不能叫做规则引擎了
4.界面操作简单,运维人员零成本使用
5.灵活可扩展,可跟随业务变化,能扩展逻辑
6.轻量级
设计
既然有了上面的几个问题,那么我们现在就开始设计一个规则吧,加入让你设计一个规则引擎,你怎么设计
需求是:促销打折,根据不同金额打不同折扣,多组逻辑判断,需要根据业务需要动态可配置,这时候可能有开发会这样设计
上图的确可以满足使用了。基本的操作也有。也满足需求了。如果有界面,也可以对规则进行修改。的确,大多数的系统也是这样设计的。轻量级。但是业务需求肯定不是刚才我简单的举的一个例子。加入我还需要折扣上次>20,现在我需要!=20,或则<20,这样显然不满足。
可能有人说了,可以吧操作符也修改成可配置。就可以满足,如下
的确也满足了。但是我的配置可能不仅仅是只为了一个折扣去花费大量时间搞一个规则引擎。显然不满足系统需要
规划流程图
设计:
刚才也说了,如果是特别简单的逻辑,上面的设计足可以满足需要。但是我们既然考虑到了规则引擎。肯定是业务复杂而且需要大量优化的,需要再多考虑一些。
1.设计要考虑条件多变化
2.规则是核心,但不是最小单元
3.规则有可能会存在竞争,比如两个规则都满足了,值返回一个结果。促销系统2个折扣都满足,享受最大折扣
4.规则要可以编排(编排可以百度一下,类似k8s编码)
5.规则要有类别
6.针对多种场景使用(并不是针对一个折扣。可能有其它需要)
7.返回条件的命中结果可能并不合适。(在促销折扣可能合适,但是在风控系统可能命中多个在算拦截)
8.给出命中规则的响应
说了这么多,直接上雏形图
这样基本满足使用。还不全面
1.例如规则的中断,加入遇到指定规则,就必须享受什么折扣,不在考虑其它优惠,例如专享价格,特价商品。
2.还有又需求需要返回对接规则在那个范围内
这样我们可以在新增之后可以设计
后面下一篇继续