前几篇介绍了QLExpress的案例,这篇我们结合实际情况来进行挨个介绍下。在真实的情况运行规则引擎的时候,整个流程如下:
一、定义字段
定义字段是在规则引擎的第一步,即非业务人员在web页面上进行可视化配置。这里配置的其实都是每一个对象即属性,因此这里我们一般以对象为单位,再在对象里面创建属性,例如:
上图展示的就是在规则里面定义属性,那么比如用户的对象,那么我们在使用的时候可以是用户对象.属性名的方式,例如:举个简单的例子
@Test public void test10() throws Exception { // 定义规则引擎执行器,qlexpress中的规则引擎执行的时候都是在这个ExpressRunner里面执行的 ExpressRunner runner = new ExpressRunner(); runner.addMacro("是否成年", "if(用户年龄 >= 18){return '用户已成年'} else { return '用户未成年' } "); IExpressContext<String, Object> context = new DefaultContext<String, Object>(); context.put("用户年龄", 10); Object result = runner.execute("是否成年", context, null, true, true); log.info("本次规则执行的结果是:{}", result); }
我们在UI界面定义的时候一般是对象.属性名,但是由于qlexpress不支持对象.属性名的方式,因此我们一般都是这样来操作的,即去掉中间的点,像上面的案例,我们根据用户的年龄进行判断是否已经成年。但是在真实的环境里面,我们每一个规则可能会涉及到使用非常多的对象,这时候如果我们默认去掉点的话,那么这里的宏占位符就会变成:用户年龄,产品id,店铺名称这种,在QLExpress里面就形成了一个拼接似的占位符。这样在真实运行的时候也会替换掉中间的点,所以进行运行的话是直接可行的。
二、定义规则逻辑
定义完了字段之后就需要开始定义我们的规则了,这里的规则其实很简单就是if-else,所以这里的的讲究一般都是一个if-else编写一条宏,这样子就包起来了,例如之前的案例:
这里与2个完整的if-else,因此这里至少有2个宏。在这里除了if-else之外,我们还有很多的function,例如上图的是否购买过,这种我们一个fuction做一条宏。以这样的规则进行下来的时候,整个规则的编写就比较有逻辑性,可读性也非常强。
三、测试规则
前端对规则进行配置后,我们还需要的是进行测试,那么就是上面流程图,把规则这些加载进去,测试验证结果后可以再web系统里面标记下规则上线或者下线。
四、生产上使用
这里主要就是加载上线的规则、可以把规则放到缓存里面去,在生产上使用效率会比较高一点。
还没有评论,来说两句吧...