上一篇《QLExpress规则演进(一)编写一个简单的规则》我们编写了一个简单的规则,当时的规则是直接把业务思维物化成了编程语言的代码,如下:
if age >=18 && sex == "男" then "用戶已成年" else "用户未成年"
在真实的环境中,一般配置规则的话,都是业务人员在配置,而不会是程序员在配置。业务人员这块他们是不熟悉代码的,所以对于他们来说,他们只需要看得懂文章就可以。但是程序是需要执行程序语言的,所以在业务人员操作完规则之后,我们需要把程序演变成程序能识别的语言,所以这里我们就提到了别名的概念。
那么这里如何转换成别名呢?看下面列表
if =====+> 如果 then======> 那么 else======> 否则 && ======> 并且 >= ======> 大于等于 == ======> 等于
所以如上的话,我们就转换成了如下的语句
如果 age 大于等于 18 并且 sex 等于 "男" 那么 "用戶已成年" 否则 "用户未成年"
那么这个时候程序如何执行呢?其实就是在QLExpress的Runner里面添加别名变量即可,QLExpress会自动帮我们完成别名的转换,也就是
1、遇到如果 就转换成 if 2、遇到那么 就转换成 then 3、遇到否则 就转换成 else 4、遇到并且 就转换成 &&
所以这里完整的代码示例如下:
package com.qlexpress.demo; import com.ql.util.express.DefaultContext; import com.ql.util.express.ExpressRunner; public class QLExpressDemo1 { public static void main(String[] args) throws Exception { // 这里我们定义整个的规则,也就是把上图的规则复制进来,实际开发中这种规则一般都存储在文件或者数据库里面。 String express = "如果 \r\n" + " age 大于等于 18 并且 sex 等于 \"男\"\r\n" + "那么\r\n" + " \"用戶已成年\"\r\n" + "否则\r\n" + " \"用户未成年\" "; //创建一个expressRunner的实例 ExpressRunner runner = new ExpressRunner(); runner.addOperatorWithAlias("如果", "if", null); runner.addOperatorWithAlias("那么", "then", null); runner.addOperatorWithAlias("否则", "else", null); runner.addOperatorWithAlias("大于等于", ">=", null); runner.addOperatorWithAlias("并且", "&&", null); runner.addOperatorWithAlias("等于", "==", null); //这里模拟真实情况下传进来的变量 DefaultContext<String, Object> context = new DefaultContext<String, Object>(); context.put("age", 17); context.put("sex", "男"); //执行对应的规则 Object r = runner.execute(express, context, null, true, false); //输出规则执行的结果 System.out.println(r); } }
然后我们运行一下:
备注:
1、这篇介绍的别名就可以很好的把程序需要执行的程序语言转换成业务人员能看得懂的语言,特别是在做页面规则配置的时候,这里的别名就尤为重要。
还没有评论,来说两句吧...