背景
我们的低代码平台产品面向普通用户,普通用户想要构建应用,但是仅仅通过拖拽页面组件进行布局是远远不够的,还需要进行逻辑部分的编写。然而普通用户是不具备编写写代码的能力。
解决方案
为了解决这个问题,我们封装了一些常用的逻辑组件,并支持对这些逻辑组件进行编排。这样普通用户就可以通过组合这些逻辑组件来实现自己应用的逻辑。同时,为了满足系统的灵活性,我们保留了支持用户自己写代码的能力。
实现
在LowcodeEngine已经给我提示和线索,在弹出的事件绑定对话框中存在一个不可点击的内置函数选项。我们决定来完善这一部分功能。该部分代码位于lowcode-engine-ext的plugin-event-bind-dialog中。
LowcodeEngine默认界面
我们扩展的结果。ps:这个版本还没有使用流程图来展示逻辑编排
在这个内置逻辑中,我们封装了构建应用时候常用的各种逻辑,包括但不限于:
- 前端相关的:
- 定义变量
- 消息提示
- 页面跳转
- 中断执行
- if-else/do-while/for等
- 调用自定义逻辑
- 模块相关的
- 导入/导出excel(支持上传配置的模版)
- 导入导出word
- 文件上传下载
- 登录、注销
- 调用后端的
- http接口调佣
- 执行数据模型
- sql相关的(插入、更新、删除)
在这个逻辑编排面板中用户就可以实现自己来编排自己的逻辑。
自定义逻辑界面和LowcodeEngine是一样的
实现思路
逻辑编排模块分为两大部分,用户逻辑配置界面和逻辑解析。
逻辑配置界面
该界面根据业务需求封装逻辑组件,最终产出一份符合我们定义的逻辑编排协议格式的json,供逻辑解析使用。
逻辑解析
逻辑解析有两种方案:解释执行json和生成对应的代码。这两种方案实现起来类似,但后者对于交付源源码或者二次开发更有优势,虽然难度稍微有一点点高。
解释执行json
这个方案比较简单,提前写好对应逻辑的解析。生成函数中只需要有这个原始的编排好的json和执行逻辑协议解析执行器就行。优点和缺点:该逻辑强制依赖执行逻辑解析器,没有逻辑执行解析器就没法干活。用 逻辑协议解析执行器来留一后手。
生成对应的代码
这个方案和执行解析json的不同就是在函数生成阶段由逻辑协议解析器解析,将已经写好的逻辑函数拼装起来,生成正常的程序员写的代码,这个可读性更好。
其他
实现方式:其实就是在plugin-event-bind-dialog的点击确定的时候生成对应的代码放到源码面板中,然后就是生成什么样的代码
还有一个要注意的点是这个逻辑组件也要支持动态加载,这样低代码应用开发人员在遇到平台中现有逻辑组件不能解决的需求但是自己又不会写代码又不想让平台支持人员来帮忙写一个自定义逻辑的代码就要用界面来配置时就排上用场了。低代码逻辑物料开发人员开发一个符合该业务的逻辑物料发布到物料仓库,低代码应用开发人员直接从仓库中拉取用就行。
不足和解决方案
不足
这个方案存在几个问题:
- 逻辑在前端,逻辑复杂了会导致前端部分过重,不符合现在系统架构的思想(前端只用来展示数据和用户交互,数据逻辑等放在后端来做,前端调用后端处理好数据的接口)。
- 在这个逻辑编排方案中基本上不能实现事务功能。
解决方案
- 弱化前端逻辑编排,尽量只调用简单的逻辑,不要涉及到事务问题,复杂的逻辑改成调用后端接口
- 后端逻辑编排,将编排好的逻辑提供给前端调用,后端编排保证事务完整性。这里编排实现有两种方案:1. 基于微服务的流程引擎。2. 将逻辑json出码成java代码。
这两种方案各有利弊,基于微服务的流程引擎,适合做自己的产品(SaaS),所有的用户和搭建的低代码都在自己的平台上运行不脱离平台,应用使用平台提供各种服务。这种的话可以基于Netflix Conductor这个开源的流程引擎来做。如果是要做客户交付或者外包使用第二种方案是更合适的,将低代码应用调用的后端逻辑也出码生成相应的java代码来做最终的交付。
总之思路就是提前写好逻辑单元供逻辑编排模块去编排调用。
以上就上我们对低代码逻辑编排的思考以及落地方案分享。
本文正在参加阿里低代码引擎征文活动