从零开始Go语言ⅩⅥ | 青训营笔记

81 阅读2分钟

这是我参与「第五届青训营」伴学笔记创作活动的第16天

规则引擎的设计与实现

功能模块划分

公式推理器Calculator:

用于计算公式例如((18)/9)9572>1002311计算,是指标解析器的底层实现,公式推理器一部分基于规则引擎实现、一部分基于手写运算符计算器实现。

指标解析器FormulaExecuter:

在公式类指标中用于公式的构建例如:目标库存为公式类指标,计算公式为平均周销*周数,由指标解析器将平均周销和周数替换成指定的数值 在传入类指标中用于将调用方的输入值转化成指标项例如目标库存中周数指标 在配置类指标中用于将配置到系统中的参数解析成指定指标 在动作类指标中用于组件构造动作执行器的执行入参并调用动作执行器。

动作执行器ActionExecuter:

根据动作的类型传入参执行方法或者发送相应的请求,并负责解析返回值;不变型动作的执行可基于动作执行历史记录;

模型执行器RuleModel:

负责解析规则模型按照深度优先的规则执行决策树,流程树

模型构建器RuleModelBuilder:

确定一个规则编码负责从数据表中将于这个规则相关的数据加载到程序中,并组装出可以用于执行的规则模型JSON

模型加载器RuleModelLoader:

负责加载配置好的模型,规则当前版本的加载优先级为Cache —> Redis —>模型构建器,规则历史版本的模型直接加载历史版本中的模型JSON

交互转换器:

前端页面本着页面友好的原则会采用多种类型的页面展示和实现,前端数据和后端模型的数据会差异比较大所以在前后交互的过程中采用交互转换器进行数据转换,每种样式的展示方式都会有一个相应的转换器。

待整理后持续更新