如何从零开发一个低代码平台,有哪些成熟技术组件可用
低代码平台至少包含表单建模、流程设计、报表可视化、代码生成器、系统管理、前端UI等组件,我们没必要重新造轮子,市场上已经有大量的成熟组件,选择合适的组件进行集成和二次开发,即可自主开发一个低代码平台。以下是以java + vue为开发技术的选型参考。
一、流程引擎选型
市场上比较有名的开源流程引擎有osworkflow、jbpm、activiti、flowable、camunda。其中:Jbpm4、Activiti、Flowable、camunda四个框架同宗同源,祖先都是Jbpm4,开发者只要用过其中一个框架,基本上就会用其它三个。开发低代码平台、OA系统、BPM软件均需要流程可视化功能,而流程可视化核心是流程引擎和流程设计器,对于市场上如此多的开源流程引擎,哪个功能和性能好,该如何选型呢?
1、Osworkflow
Osworkflow是一个轻量化的流程引擎,基于状态机机制,数据库表很少,Osworkflow提供的工作流构成元素有:步骤(step)、条件(conditions)、循环(loops)、分支(spilts)、合并(joins)等,但不支持会签、跳转、退回、加签等这些操作,需要自己扩展开发,有一定难度,如果流程比较简单,osworkflow是很号的选择,笔者在2008年给某大型国企集团开发OA系统,就是基于Osworkflow,至今仍稳定运行,性能也很高。
2、JBPM
JBPM由JBoss公司开发,目前最高版本JPBM7,不过从JBPM5开始已经跟之前不是同一个产品了,JBPM5的代码基础不是JBPM4,而是从Drools Flow重新开始,基于Drools Flow技术在国内市场上用的很少,所有不建议选择jBPM5以后版本,jBPM4诞生的比较早,后来JBPM4创建者Tom Baeyens离开JBoss后,加入Alfresco后很快推出了新的基于jBPM4的开源工作流系统Activiti, 另外JBPM以hibernate作为数据持久化ORM也已不是主流技术。笔者在2012年开发某集团BPM平台时,选择的就是JBPM4.4版本,也是4系列的最后一个版本,进行了大量的扩展开发,才实现中国特色的流程需求。现在时间节点选择流程引擎,JBPM不是最佳选择。
3、Activiti
activiti由Alfresco软件开发,目前最高版本activiti 7。activiti的版本比较复杂,有activiti5、activiti6、activiti7几个主流版本,选型时让人晕头转向,有必要先了解一下activiti这几个版本的发展历史。activiti5和activiti6的核心leader是Tijs Rademakers,由于团队内部分歧,在2017年时Tijs Rademakers离开团队,创建了后来的flowable, activiti6以及activiti5代码已经交接给了 Salaboy团队, activiti6以及activiti5的代码官方已经暂停维护了, Salaboy团队目前在开发activiti7框架,activiti7内核使用的还是activiti6,并没有为引擎注入更多的新特性,只是在activiti之外的上层封装了一些应用。结论是activiti谨慎选择。
4、flowable
flowable基于activiti6衍生出来的版本,flowable目前最新版本是v6.6.0,开发团队是从activiti中分裂出来的,修复了一众activiti6的bug,并在其基础上研发了DMN支持,BPEL支持等等,相对开源版,其商业版的功能会更强大。以flowable6.4.1版本为分水岭,大力发展其商业版产品,开源版本维护不及时,部分功能已经不再开源版发布,比如表单生成器(表单引擎)、历史数据同步至其他数据源、ES等。Flowable 是一个使用 Java 编写的轻量级业务流程引擎,使用 Apache V2 license 协议开源。2016 年 10 月,Activiti 工作流引擎的主要开发者离开 Alfresco 公司并在 Activiti 分支基础上开启了 Flowable 开源项目。基于 Activiti v6 beta4 发布的第一个 Flowable release 版本为6.0。Flowable 项目中包括 BPMN(Business Process Model and Notation)引擎、CMMN(Case Management Model and Notation)引擎、DMN(Decision Model and Notation)引擎、表单引擎(Form Engine)等模块。
5、Camunda
Camunda基于activiti5,所以其保留了PVM,最新版本Camunda7.15,保持每年发布2个小版本的节奏,开发团队也是从activiti中分裂出来的,发展轨迹与flowable相似,同时也提供了商业版,不过对于一般企业应用,开源版本也足够了。
选择camunda的理由:
(1)通过压力测试验证Camunda BPMN引擎性能和稳定性更好。详细见:https://blog.csdn.net/wxz258/article/details/109030329
(2)功能比较完善,除了BPMN,Camunda还支持企业和社区版本中的CMMN(案例管理)和DMN(决策自动化)。Camunda不仅带有引擎,还带有非常强大的工具,用于建模,任务管理,操作监控和用户管理,所有这些都是开源的。详细见:https://blog.csdn.net/wxz258/article/details/109121092
二、流程设计器选型
对于低代码平台中的流程可视化,流程设计器是重要的支撑工具,目前市场上比较主流的流程设计器有bpmn-js、mxGraph、Activiti-Modeler、flowable-modeler、easy-flow、bpmn2-modeler插件等。
1、bpmn-js
bpmn-js 是 BPMN 2.0 渲染工具包和 Web 模型。bpmn-js 正在努力成为 Camunda BPM 的一部分。bpmn-js 使用 Web 建模工具可以很方便的构建 BPMN 图表,可以把 BPMN 图表嵌入到你的项目中,容易扩展。bpmn-js是基于原生js开发,支持集成到vue、react等开源框架中。
2、mxGraph
mxGraph是一个强大的JavaScript流程图前端库,可以快速创建交互式图表和图表应用程序,国内外著名的ProcessOne和draw.io都是使用该库创建的强大的在线流程图绘制网站. 由于mxGraph是一个开放的js绘图开发框架,我们可以开发出很炫的样式,或者完全按照项目需求定制。官方网站:
3、Activiti-Modeler
Activiti 开源版本中带了web版流程设计器,在Activiti-explorer项目中有Activiti-Modeler,优点是集成简单,开发工作量小,缺点是界面不美观,用户体验差。
4、flowable-modeler
flowable开源版本中带了web版流程设计器,展示风格和功能基本跟Activiti-Modeler一样,优点是集成简单,开发工作量小,缺点是界面不美观,用户体验差。
5、Eclipse插件bpmn2-modeler
C/S版本的流程设计器,如果没有强调基于浏览器设计流程图,也可以考虑Eclipse插件版流程设计器bpmn2-modeler。
结论:推荐大家使用camunda(流程引擎)+bpmn-js(流程设计器)组合,笔者在AI低代码开发平台实战验证,功能比flowable、activiti流程引擎强大,性能和稳定性更好。
三、表单设计器选型
1、form-generator
form-generator 是基于Element UI表单设计及代码生成器,可将生成的代码直接运行在基于Element的vue项目中;也可导出JSON表单,使用配套的解析器将JSON解析成真实的表单。
2、vue-form-making
vue-form-making基于 vue 和 element-ui 实现的可视化表单设计器,使用了最新的前端技术栈,内置了 i18n 国际化解决方案,可以让表单开发简单而高效。
3 、k-form-design
k-form-design设计器布局参考form-generator项目,基于vue和ant-design-vue实现的表单设计器,样式使用less作为开发语言,主要功能是能通过简单操作来生成配置表单,生成可保存的JSON数据,并能将JSON还原成表单,使表单开发更简单更快速
四、vue框架选型
1、ElementUI
Element,一套为开发者、设计师和产品经理准备的基于 Vue 2.0 的桌面端组件库
2、Ant Design Vue
蚂蚁金服出品,Ant Design 作为一门设计语言面世,经历过多年的迭代和积累,它对 UI 的设计思想已经成为一套事实标准,受到众多前端开发者及企业的追捧和喜爱,也是 React 开发者手中的神兵利器。希望 ant-design-vue 能够让 Vue 开发者也享受到 Ant Design 的优秀设计。
ant-design-vue 是 Ant Design 的 Vue 实现,组件的风格与 Ant Design 保持同步,组件的 html 结构和 css 样式也保持一致,真正做到了样式 0 修改,组件 API 也尽量保持了一致。Ant Design Vue 致力于提供给程序员愉悦的开发体验。
3、Vue Antd Admin
Ant Design Pro 的 Vue 实现版本,开箱即用的中后台前端/设计解决方案。
4、vue-admin-beautiful
采用vue + element-ui 前后端分离开发模式、面向全屏幕尺寸的响应式适配能力(兼容电脑、手机、平板),有vue2和vue3两个版本,分开源版本和付费版,适合正在以及想使用 element-ui/element-plus 开发,前端开发经验 1 年+,熟悉 Vue.js 技术栈,使用它开发过几个实际项目的团队。
5、Avue.js
Avue.js2.0是基于现有的element-ui库进行的二次封装,简化一些繁琐的操作,核心理念为数据驱动视图,主要的组件库针对table表格和form表单场景,同时衍生出更多企业常用的组件,达到高复用,容易维护和扩展的框架,同时内置了丰富了数据展示组件,让开发变得更加容易,avue-cli是后台模版。企业版本收费。
五、系统管理组件选型
1、若依RuoYi-Vue
基于SpringBoot,Spring Security,JWT,Vue & Element 的前后端分离权限管理系统,目前是码云开源里很火的一个框架,优点是提供了系统管理常用的功能,比如:组织管理、角色管理、日志管理等,设计比较简单,功能比较聚焦,代码好读懂,缺点是电子表单、流程引擎收费。
2、jeecg-boot
JeecgBoot 是一款基于代码生成器的低代码开发平台!前后端分离架构 SpringBoot2.x,SpringCloud,Ant Design&Vue,Mybatis-plus,Shiro,JWT,支持微服务。优点是提供了组织管理、角色管理、日志管理等系统管理常用的功能,组件比ruoyi多,涉及面比较广,代码生成器功能比较强大,但代码比ruoyi复杂,完全读懂可维护有难度,缺点是电子表单、流程引擎收费。
3、OPSLI
该平台自带了菜单管理、角色管理、组织机构、租户管理、字典管理、配置管理、系统设置等系统管理常用模块。
六、可视化图表选型
相比于传统手工定制的图表与数据仪表盘,图表可视化制作平台的出现,可以打破抵消的定制开发, 数据分散的问题,通过数据采集、清洗、分析到直观实时的数据可视化展现,能够多方位、多角度、全景展现各项指标,实时监控,动态一目了然。
可视化图表库技术选型,目前笔者调研的已知主流可视化库有:
• echart 一个基于 JavaScript 的老牌开源可视化图表库
• D3.js 一个数据驱动的可视化库, 可以不需要其他任何框架独立运行在现代浏览器中,它结合强大的可视化组件来驱动 DOM 操作
• antv 包含一套完整的可视化组件体系
• Chart.js 基于 HTML5 的 简单易用的 JavaScript 图表库
• metrics-graphics 建立在D3之上的可视化库, 针对可视化和布置时间序列数据进行了优化
• C3.js 通过包装构造整个图表所需的代码,使生成基于D3的图表变得容易
我们使用以上任何一个库都可以实现我们的可视化大屏搭建的需求, 各位可以根据喜好来选择.
七、其它常用后端技术栈
1 Maven 项目构建依赖管理
Maven 翻译为"专家"、“内行”,是 Apache 下的一个纯 Java 开发的开源项目。基于项目对象模型(缩写:POM)概念,Maven利用一个中央信息片断能管理一个项目的构建、报告和文档等步骤。
Maven 是一个项目管理工具,可以对 Java 项目进行构建、依赖管理。本系统采用Maven来管理项目,并且建立的是多模块项目,让每个模块独立,高内聚,低耦合.不同模块之间保持自己的完整性。可以互相不干扰.方便以后的维护开发。
2 Redis 缓存
Redis是一个开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
它的优点如下:速度快,完全基于内存,使用C语言实现,网络层使用epoll解决高并发问题,它的单线程模型避免了不必要的上下文切换及竞争条件。
3 Ngnix Http服务和反向代理服务
什么是Nginx?Nginx是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP这些邮件协议的代理服务器,高可靠性,支持高并发性,低系统资源消耗性。简单来说,当一台服务器的单位时间内的访问量越大时,服务器压力就越大,大到超过自身承受能力时,服务器就会崩溃。为了避免服务器崩溃,让用户有更好的体验,以可使用Ngnix负载均衡来分担服务器压力。
4 mysql数据库
MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。
MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。
MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 软件采用了双授权政策,分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择 MySQL 作为网站数据库。
5 SpringBoot框架
SpringBoot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。
SpringBoot的核心就是简化配置,快速开发,非常符合我们公司的开发理念。让开发人员只关心业务的实现而无需担心开发时繁琐的配置问题,在搭配上代码生成器,即使不懂代码也能开发出自己想要的功能。 SpringBoot框架有很好的拓展性,可以将SpringBoot项目拆分为SpringCloud微服务。
6 Mybatis-Plus 数据持久化框架
Mybatis是当前最火热的java持久层框架之一,它不仅是一款优秀的持久层框架,还支持定制化 SQL、存储过程以及高级映射。Mybatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。Mybatis可以使用简单的 XML或注解来配置和映射原生信息,将接口和Java的POJOs(Plain Ordinary Java Object,普通的Java对象)映射成数据库中的记录。
而Mybatis-Plus 在 Mybatis 的基础上进行扩展,只做增强不做改变,引入 Mybatis-Plus 不会对您现有的 Mybatis 构架产生任何影响,而且 MP 支持所有 Mybatis 原生的特性。
7 Druid数据库连接池
Druid是一款开源的JDBC连接池、监控组件。可以监控数据库访问性能,Druid内置提供了一个功能强大的StatFilter插件,能够详细统计SQL的执行性能,这对于线上分析数据库访问性能有帮助。
8 Shiro 权限控制
Apache Shiro是一个强大且易用的Java安全框架,执行身份验证、授权、密码和会话管理。使用Shiro的易于理解的API,您可以快速、轻松地获得任何应用程序,从最小的移动应用程序到最大的网络和企业应用程序。使用Shiro可以控制页面按钮权限、菜单访问权限、后台服务接口权限。在前后端分离架构中,可以和jwt配合使用。
9 JWT 登录token
Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519).该token被设计为紧凑且安全的,特别适用于分布式站点的单点登录(SSO)场景。JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源,也可以增加一些额外的其它业务逻辑所必须的声明信息,该token也可直接被用于认证,也可被加密。在前后端分离架构中,可以和shiro配合使用。
10 Quartz 定时任务
Quartz框架是一个全功能、开源的任务调度服务,可以集成几乎任何的java应用程序—从小的单片机系统到大型的电子商务系统。Quartz可以执行上千上万的任务调度。云程平台集成了任务调度功能,开发了可视化界面,用简单的操作来实现自己所需要的任务调度。
11 EasyPoi office文档处理
云程平台office文件处理采用了EasyPoi 这个POI 工具类来做文件的快速导入导出,让一个没见接触过poi的人员 就可以方便的写出Excel导出,Excel模板导出,Excel导入,Word模板导出,通过简单的注解和模板 语言(熟悉的表达式语法),完成以前复杂的写法。也非常匹配简单、快速开发的理念。
此外,使用OpenOffice来做文档的预览功能,OpenOffice是一个开源办公套件,它的文件处理可以实现office系列文档ppt,pptx,xls,xlsx,doc, docx都能够在线预览。
12 Swagger2 在线API
Swagger2是一个规范和完整的框架,用于生成、描述、调用和可视化Restful风格的web服务。
现如今,前后端分离已经逐渐成为互联网项目一种标准的开发方式,前端与后端交给不同的人员开发,但是项目开发中的沟通成本也随之升高,这部分沟通成本主要在于前端开发人员与后端开发人员对WebAPI接口的沟通,Swagger2 就可以很好地解决,它可以动态生成Api接口文档,降低沟通成本,促进项目高效开发。可以使用 Swagger2 +knife4j-ui进行API发布和管理。
13 Slf4j 日志接口
Slf4j是一个日志接口,自己没有具体实现日志系统,只提供了一组标准的调用api,这样将调用和具体的日志实现分离,使用Slf4j后有利于根据自己实际的需求更换具体的日志系统。
比如,之前使用的具体的日志系统为log4j,想更换为logback时,只需要删除log4j相关的jar,然后加入logback相关的jar和日志配置文件即可,而不需要改动具体的日志输出方法,试想如果没有采用这种方式,当你的系统中日志输出有成千上万条时,你要更换日志系统将是多么庞大的一项工程。
如果你开发的是一个面向公众使用的组件或公共服务模块,那么一定要使用Slf4j的这种形式,这有利于别人在调用你的模块时保持和他系统中使用统一的日志输出。
14 WebSocket 即时通讯
云程平台即时通讯采用WebSocket协议,它是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议。简单来说,使用WebSocket使得客户端和服务器之间的数据交换变得更加简单,并且能有效节约服务器资源和带宽。WebSocket也为本系统在web端、app端、小程序端、H5端都实现了消息实时互通,实时推送功能。
15 Freemarker模板引擎
FreeMarker 是一款模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页,电子邮件,配置文件,源代码等)的通用工具。 它不是面向最终用户的,而是一个Java类库,是一款程序员可以嵌入他们所开发产品的组件。模板编写为FreeMarker Template Language (FTL)。
低代码平台可以采用Freemarker模板引擎来进行代码生成器模板的开发,集成了前后端模板,支持全页面操作生成自己想要的功能,包括单表的增删改查,多表关联的开发,还有工作流程表单的开发以及移动端的界面功能生成。有效降低软件开发投入成本,使开发变得简单。
16 minio 分布式文件存储
Minio是一个开源的对象存储服务组件,非常适合存储大量非结构后的数据,比如图片、视频、文档等。Minio兼容Amason的S3分布式对象存储项目,采用Golang实现,客户端支持Java,Python,Javacript, Golang语言。对于中小型企业,如果不选择存储上云,那么 Minio 是个不错的选择,麻雀虽小,五脏俱全。当然 Minio 除了直接作为对象存储使用,还可以作为云上对象存储服务的网关层,无缝对接到 Amazon S3、MicroSoft Azure。
九、总结
自主开发低代码平台的难点是技术组件众多,如何掌握并有效集成是难点,尤其是流程引擎和表单引擎技术难度较大,没有从事过BPM开发的团队很难搞定,开发失败的风险比较大。更合理的捷径是采购市场上成熟的低代码平台源码,再进行二次开发完善,难度和风险比从头自主开发小很多。

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)