标题:关于规则引擎|青训营笔记
这是我参与「第五届青训营 」伴学笔记创作活动的第 1 天
规则引擎是啥
规则引擎是一种嵌入于应用程序中的组件,实现了将业务决策从应用程序代码中分离出来,并使用预定义的语义模块编写业务决策。接受数据输入,解释业务规则,并根据业务规则做出业务决策。
这里体现了一种解耦合的思想。每次修改业务决策并不需要修改程序代码,而是通过我们的新需求去动态地生成一个新的决策,提高了效率,也增强可修改性。
这在很多的实际场景中是非常重要的,通过一个稳定有效的规则引擎,我们可以更加快速对决策进行调整修改,以面对实际业务环境下的问题(比如针对黑灰产业的行为对我们业务中的策略做出有效调整)。
规则引擎的组成
-
数据输入
- 比如:接受业务数据输入
-
规则理解
- 根据先前定义的规则去理解输入语义
-
规则执行
- 根据语义分析结果正确执行对应策略
规则引擎?编译器?
根据上述规则引擎的描述,这是一个从规则输入到规则执行的映射,我们很容易想到编译器(将编程语言转为可执行的程序的工具)。
本次课程中提到了编译原理的相关知识,包括
-
词法分析
- 从字符串到Token(语法单元)的映射过程
-
语法分析
-
识别Token序列的语法结构
比如识别
if(condition){func()}else{foo()}所代表的语法结构 -
常见的方法:递归下降分析法(非常经典,常见的实现方式可以采用DFS,回溯,当然也可以通过改进提升效率)
-
-
抽象语法树
- 表达式的语法结构表达方式
-
类型检查
- 这部分可以在语法分析和构建语法树的时候同时实现(比如:一个运算符的子节点必须是相同类型语法节点)
- 当然也可以在执行时进行动态的类型检查。
这些编译器前端的重要知识领域对我们构造一个规则引擎有巨大的帮助。