在上一篇文章里面我们使用function函数,具体函数示例如下:
function getUserInfo(int userId) { if(userId > 0){ return "获取到了用户的信息" }else{ return "获取不到用户的信息" } } return getUserInfo(uid)
我们在第一篇文章介绍过,线上生产环境的规则引擎一般都不是我们写代码的人员去配置的,一般有几种做法:
1、业务人员手动写完所有的规则,研发人员根据业务人员编写的规则逻辑,把它转化成代码来执行。 2、业务人员使用可视化配置规则,生产环境自动转移成硬编码,在生产环境自动执行。
这篇文章我们就介绍第二种方式,即编写可读性强的业务代码规则,然后使其自动执行,所以我们把上面的规则进行转化一下即:
function getUserInfo(int userId) { 如果(userId > 0) 则 { 返回 "获取到了用户的信息" }否则{ 返回 "没有获取到用户id" } } 执行 getUserInfo(uid)
这里我们改写了一些if,else,return这些参数,给他起了个别名,这样子我们在前端可视化界面里面就可以让用户根据自己的逻辑进行判断了,即在如果 xxxx条件 则 xxxx 否则 xxxx 这样的业务逻辑,这时候就要用到我们这篇文章的主题,即Alias别名。
别名是什么:别名就是把一些固定字符串作为占位符,然后使用别名进行替代,例如上面的案例,我们编写的代码如下:
@Test public void test6() throws Exception { // 定义规则引擎执行器,qlexpress中的规则引擎执行的时候都是在这个ExpressRunner里面执行的 ExpressRunner runner = new ExpressRunner(); runner.addOperatorWithAlias("如果", "if", null); runner.addOperatorWithAlias("否则", "else", null); runner.addOperatorWithAlias("返回", "return", null); runner.addOperatorWithAlias("执行", "return", null); String expressQL = "function getUserInfo(int userId) {\r\n" + " 如果(userId > 0){\r\n" + " 返回 \"获取到了用户的信息\"\r\n" + " }否则{\r\n" + " 返回 \"没有获取到用户id\"\r\n" + " }\r\n" + "}\r\n" + "执行 getUserInfo(uid)"; DefaultContext<String, Object> params = new DefaultContext<String, Object>(); params.put("uid", 0); // 有了规则,有了变量,那么就需要去执行对应的规则 Object result = runner.execute(expressQL, params, null, true, true); log.info("本次规则执行的结果是:{}", result); }
这时候我们相当于给if、else、return这些固定字符串起了一个别名,给用户展示的时候直接使用如果、否则、返回、执行这样的字样比较业务化,业务人员也看的比较清楚,但是在代码里面,代码是不认识如果、否则、返回、执行这些字样的,所以在程序运行的时候,我们使用别名转化成程序可识别的if、else、return这样的字符。我们看下执行结果
备注:
1、这里添加别名主要是在执行器上进行添加。
2、添加别名的方法是:runner.addOperatorWithAlias(keyWordName, realKeyWordName, errorInfo);
还没有评论,来说两句吧...