Google Aviator Evaluator 使用入门(一)

Aviator Evaluator 使用入门(一)

https://www.yuque.com/boyan-avfmj/aviatorscript/tvahat

一、什么是规则引擎

  1. 定义:规则引擎是一种软件系统,用于执行基于规则的推理。它将业务规则与事实数据相结合,得出结论。

  2. 组成:规则引擎通常由规则存储库、推理引擎、工作内存 3个部分组成。

  3. 工作流程:获取输入数据,加载规则,匹配规则,执行动作,产生输出结果。

二、Aviator Evaluator 介绍

  1. 简介:Aviator是一个轻量级的Java表达式执行引擎,可以编译和执行表达式。

  2. 特点:语法简单,性能高效,支持脚本和编程语言,线程安全等。

  3. 用途:常用于规则匹配、业务流程、算法计算等场景。

三、Aviator Evaluator 代码案例

引入Maven

<dependency>
    <groupId>com.googlecode.aviator</groupId>
    <artifactId>aviator</artifactId>
    <version>5.3.3</version>
</dependency>

Where Sql示例

String expression = "id > 1 && name == 'John'";

Map<String, Object> env = new HashMap<>();
env.put("id", 2);
env.put("name", "John");

AviatorScript compiledExp = AviatorEvaluator.compileScript(code);
Boolean result = (Boolean) compiledExp.execute(env);

if (result) {
  System.out.println("执行SQL: SELECT * FROM table WHERE " + expression); 
}

数学计算示例

String expression = "price * qty - discount";

Map<String, Object> env = new HashMap<>();  
env.put("price", 10.5);
env.put("qty", 2); 
env.put("discount", 5);
AviatorScript compiledExp = AviatorEvaluator.compileScript(code);


Double result = (Double) compiledExp.execute(env);

System.out.println("总价:" + result);

表达式示例

String expression = "a > 3 || b < 5 && c == 10";

Map<String, Object> env = new HashMap<>();
env.put("a", 1); 
env.put("b", 6);
env.put("c", 10);
AviatorScript compiledExp = AviatorEvaluator.compileScript(code);

Boolean result = (Boolean) compiledExp.execute(env);

System.out.println("表达式结果:" + result); 

4. 代码块示例

String code = "{" +
    " int a = 1;" +
    " int b = 2;" + 
    " System.out.println(a + b);" +
    " return a + b;" + 
"}";

AviatorScript script = AviatorEvaluator.compileScript(code);

Map<String, Object> env = new HashMap<>();
Number result = (Number) script.execute(env);

System.out.println("代码块结果:" + result);

四、使用场景

  1. 规则引擎:匹配规则条件,进行规则推理。

  2. 工作流引擎:判断节点的进入条件。

  3. 业务规则:计算订单价格、积分等。

  4. 过滤条件:实现查询语句的where条件过滤。

  5. 逻辑外置:将条件逻辑放在数据库中,实现动态调整

五、总结

  1. 明确了什么是规则引擎,它通过规则匹配实现业务决策的方式。这种将业务规则和代码逻辑分离的思想值得学习

  2. 通过表达式可以实现很多有趣的功能,比如动态查询、规则匹配、流程控制等。

  3. 理解了将复杂问题拆解的思想。规则引擎通过将业务规则拆解为较小的条件表达式,实现了易维护、易扩展、高性能的系统,同时这种思想也适用于其他复杂问题的解决。

  4. 认识到合理应用框架的重要性。熟练使用高质量的框架可以极大地提高工作效率和系统质量

posted @ 2024-09-13 09:47  minsin  阅读(444)  评论(0编辑  收藏  举报