#7 规则引擎设计与实现-1 | 青训营笔记

117 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 7 天
本次编程学习的基本环境配置如下
OS: macOS 13.1
IDE: Goland 2022.3
Go Version: 1.18

规则引擎介绍

引用自blog.csdn.net/localhost01…, 侵删

我们在对复杂的业务进行开发时,程序本身逻辑代码和业务代码互相嵌套错综复杂,同时维护成本高可拓展性差。规则引擎即是:可降低复杂业务逻辑组件复杂性、降低应用程序的维护和可扩展性成本的组件

为什么需要规则引擎

业务规则经常变化,系统需依据业务的变化,实现快速、低成本的迭代更新。因此,为了快速、低成本的更新,我们需将逻辑代码和业务代码进行解耦.

  1. 研发人员开发维护程序部分,在测试通过后,后续不会经常变化改动
  2. 业务人员可直接管理这些业务规则,而不需要研发人员的参与

优点

  1. 业务人员和研发人员各司其职;
  2. 稳定层和变化层分离,这是一种优秀的设计模式;
  3. 变化层支持可视化或配置化的方式,快速进行业务规则的增删改操作,甚至支持热插拔和热更新。以减少冗长的开发和测试周期;
  4. 部分规则引擎甚至带有设计器(如drools),还可解决我们 “简式建模” 的需求。

编译原理相关知识

什么是编译

编译的过程就是 把某种语言文本形式源程序, 转换成另一种形式.

解释型语言和编译型语言

有的语言提前把代码直接转换成二进制可执行文件,这种就是编译型语言,用的转换工具就叫编译器,比如C、C++、Go。一次编译可重复执行。编译后产物不能跨平台,不同系统对可执行文件的要求不同(Windows中的PE, Linux 中的ELF)。

有的语言则可以一边执行一边转化,用到哪里了就转哪里,这种就是解释型语言,用的转化工具叫虚拟机或者解释器,比如java python、javascript.

编译过程的一般情况(前端)

  1. 词法分析. 将源代码处理成Token(词素)序列的过程. 算法基础为确定的有限自动机(DFA, 如下图)和正则语言(Regular Language).

image.png

int a = 1;在词法分析后得到的Token序列为
(KEYWORD, int), (IDF, a), (ASSIGN, =), (INTEGER, 1), (DELIMITER, ;)

  1. 语法分析. 语法分析依次读入词法分析得到的各个词素, 并判定是否符合既定的语法规则,并给出程序的语法结构, 通常用抽象语法树表示, 算法基础是上下文无关文法和递归下降算法.

image.png