业务需求快速变化的背景
我们在对业务需求进行梳理后,在进行程序设计时,对于将来可能发生变化的常量、变量、阀值、开关、条件、公式等等,可能会配置在环境变量或数字字典来支持可配置。但是需求变化往往会更加复杂、更加不可预测,所以需要更加强大的可配置的业务规则/策略,来提高系统的可扩展性。
可配置、可扩展从浅到深
从简单的表达式计算、报表模板/邮件模板/sql模板,到复杂规则引擎,再到可编排规则引擎,最后是低代码平台。
一、表达式引擎
相对规则引擎,表达式引擎更轻,使用更加简单。语法和Java比较接近,部分表达式引擎支持将表达式编译成字节码,在执行速度更快。主流的有AviatorScript、QLExpress、SpEL、MVEL、OGNL等。
如AviatorScript
AviatorScript 是一门高性能、轻量级寄宿于 JVM 之上的脚本语言。AviatorScript 可将表达式编译成字节码。
1、Aviator一开始的定位为表达式语言,用于表达式的运算。
2、目前已经支持 if/else 条件语、for/while 循环语句。
3、在业务复杂规则配置的时候可以动态生成脚本并执行规则判断。
4、可使用在规则引擎中。
其它各选手不一一列举,表达式引擎各组件对比参考文档
https://zhuanlan.zhihu.com/p/666532372
二、模板引擎
如velocity/freemaker
velocity是一个基于Java的模板引擎,可以通过特定的语法获取在Java对象的数据,填充到模板中,从而实现界面和Java代码的分离。这意味着可以使用velocity替代jsp的开发模式了,这使得前端开发人员可以和 Java 程序开发人员同步开发一个遵循 MVC 架构的 web 站点,在实际应用中,velocity还可以应用于很多其他的场景。
1)、web应用程序:作为应用程序的视图,展示数据。
2)、源代码生成:velocity可用于基于模板生成Java源代码。
3)、自动电子邮件:网站注册,认证等的电子邮件模板。
4)、sql模板:自定义报表的sql模板。
5)、网页静态化:基于velocity模板,生成静态网页。
三、规则引擎
带配置页面的成熟规则引擎drools、urule。
1、Drool
Drools 是用 Java 语言编写的开源规则引擎,是KIE(知识就是一切)项目的一部分。其使用 ReteOO算法执行规则。支持使用自然语言表达业务逻辑,也可以使用 Java/Groovy/Python + XML 语法编写规则。 早期的版本一般由开发人员通过开发工具插件来定义规则,目前已有Drools Workbench通过web服务提供给业务人员维护规则。
Rules:我们自己定义的业务规则,比如我们自己写的规则文件。所有规则必须至少包含触发规则的条件和规则规定的操作。
Production memory:规则存储在 Drools 引擎中的位置。
Facts:输入或更改到 Drools 引擎中的数据,Drools 引擎匹配规则条件以执行适用规则。在规则中修改了Fact对象的值,真实的JavaBean的数据也会发生改变。 比如:当我们调用ksession.insert(对象),那么插入的这个对象就可以理解成Facts对象。
Working memory:facts 在 Drools 引擎中存储的位置。
Pattern matcher:匹配器,将Rule Base中所有的规则与Working memory中的Fact对象进行模式匹配,匹配成功的规则将被激活并放入到Agenda中。
Agenda:议程,执行Agenda中被激活的排好序的规则。
2、URule
系统架构图
使用者通过浏览器打开URule Pro规则设计器来定义业务规则,完成后的业务规则文件会被存储在规则存储仓库中(在URule Pro当中规则存储仓库既可以是文件系统中的某个目录,也可以存储于数据库当中)。规则文件调用时引擎会从规则存储仓库里把指定的规则文件取出,再通过规则构建引擎对规则进行解析、编译,最后由规则执行引擎执行并返回结果。
规则例子
3、流程引擎与规则引擎
流程引擎和规则引擎是两种不同的软件系统,各有其独特的特点。
1)、流程引擎是一种自动化业务流程的软件系统,它可以帮助您管理复杂的业务流程。流程引擎通常使用图形界面来定义业务流程,并且能够自动地执行流程中的各个步骤。
2)、规则引擎是一种可以根据特定规则自动处理业务数据的软件系统。规则引擎使用特定的语言(如DRL)定义规则,并且能够在数据发生变化时自动地执行规则。
3)、流程引擎和规则引擎之间有着密切的关联,它们可以互相配合工作,以实现更强大的业务自动化。例如,您可以在流程引擎中定义业务流程,并在流程的某些步骤中使用规则引擎来自动处理业务数据。
三、可编排规则引擎
liteflow 轻量,快速,稳定可编排的组件式规则引擎
1、组件编排
LiteFlow是一个非常强大的现代化的规则引擎框架,融合了编排特性和规则引擎的所有特性。
利用LiteFlow,你可以将瀑布流式的代码,转变成以组件为核心概念的代码结构,这种结构的好处是可以任意编排,组件与组件之间是解耦的,组件可以用脚本来定义,组件之间的流转全靠规则来驱动。LiteFlow拥有开源规则引擎最为简单的DSL语法。
LiteFlow的脚本组件,支持众多脚本语言,完全和Java打通,你可以用脚本来实现任何逻辑。
LiteFlow支持把编排规则和脚本放在数据库,注册中心中,还有可以任意扩展的接口,方便你定制。
2、配置、图示、代码例子
3、优缺点
1)无编排设计界面,只能手工编写规则文件。
2)、IDEA插件
试体验一下,有不少报错信息,就没有深入体验。
四、低代码平台
BizWork 云原生应用组装低代码平台
阿里推出的BizWork云原生的工作台,功能很强大,很震撼。我们可以借鉴阿里、美团等公司一些产品,研究和分析里面的功能,然后研发我们自己的低代码平台。
强大的功能:业务建模、服务编排、流程编排、页面编排、BizWorks Toolkit(IDE 插件)双向联动 等。
完整的闭环:建模、开发、测试、部署、运营、治理。
阿里是卖SAAS服务,体验了一个月,功能还是很强大的。前端LowCodeEngine低代码引擎,配合后端服务编排,可以快速完成页面和服务的在线配置开发。云原生应用还具备业务建模、在线开发、测试、部署能力。
1、服务编排
各业务系统的http服务、rpc服务,消息队列,本地sdk服务。通过服务编排把这些孤立的程序单元按照业务需求编排起来,形成新的业务服务。
2、节点类型丰富
3、BizWorks双向联动机制机制
1)模型到代码 - 设计阶段
设计阶段, 在建模平台完成模型设计, 实现模型的可视化和在线化
通过平台预置能力生成脚手架,模型对应的代码框架也同时生成
代码到模型 - 开发阶段
进入开发阶段后,研发人员更聚焦在代码侧,可以借助BizWorks Toolkit(IDE 插件) 快速完成
2)本地模型批量标注
本地模型批量扫描上报
联动效率和有效性
如何将平台(重设计),代码IDE(重开发)这两个不同定位的场景有效串联是双向联动需重点解决的问题。
3)BizWorks Toolkit(IDE 插件)通过提供了一系列配套能力使联动效率得到很大提升,也使得双向联动这一流程能有效落地:
平台模型实时同步
模型&代码实时校验
模型&代码一致性规约扫描
错误修复辅助(快速定位错误代码、QuickFix)
针对模型变更的代码增量生成
代码侧模型批量扫描上报
3、BizWorks Toolkit(IDE 插件)使用
插件下载
插件菜单