低代码应用平台的设计与实现

期刊: 环球科学 DOI: PDF下载

李国川 李林凡

中国信息通信研究院西部分院

摘要

在科技快速发展的时代,互联网与各行业深度融合,推动了Web系统的需求增长。为了提升服务质量和企业竞争力,后台管理系统成为企业的重要组成部分。然而,现有的管理系统普遍存在页面结构固定、功能相似(主要是数据的增删改查)、样式要求不高但需求量大的问题。 为此,我们旨在通过减少代码冗余、增强代码可维护性和简化数据可视化,设计并实现一个基于低代码的管理系统模板库。我们采用组件化设计原则和面向对象思想,开发了一系列常见的功能组件和页面模板,包括图表和表格组件、网络请求组件、接口加密组件,以及系统首页、数据统计、个人中心、用户管理等页面模板,预先实现了简单的业务逻辑。开发者只需输入特定参数,即可快速构建管理系统。


关键词

低代码, 组件库, React框架, 流程引擎

正文


第一章 绪论

1.1研究背景与意义


早期的前端开发中,网页代码和后端程序代码常常混合在一起,使用JSP、ASP、PHP等模板技术在服务器端生成HTML页面。这种模式导致前端开发效率低下,改动需求需要前后端人员共同参与,增加了沟通和协调成本。随着网站开发需求的增长,前后端分离的开发模式应运而生,前端负责页面渲染、数据填充和交互逻辑,后端负责提供数据,极大地提升了开发效率。

但对于管理系统来说,现有的组件库并不完全适用。管理系统注重信息展示和功能实现,页面结构固定、样式要求不高,主要进行数据的增删改查操作。如果每个管理系统都从头开发,会导致大量重复代码和人力浪费。

在团队协作开发中,由于开发人员水平和代码风格的差异,可能会影响代码的可读性和维护性。此外,前端开发需要掌握JavaScript、CSS、HTML等基础技术,以及Sass、SCSS、ES、Vue、React等不断更新的前端技术,这给开发人员带来了沉重的学习压力。

因此,寻求一种能够减少代码冗余、提高开发效率、降低学习成本,并适应管理系统特性的组件复用方案显得尤为重要。


1.2国内外研究现状


“低代码”是Forrester Research于2014年提出的概念,指一种主要应用于企业信息化领域的快速开发技术。借助低代码平台,开发者无需编码即可生成企业应用的常见功能,少量编码能开发出更多扩展功能。低代码应用平台源于国外,发展壮大于国外,国内发展的比较晚,但是发展势头迅猛,最近几年低代码应用规模迅速扩大,据海比研究院数据表明,2021年中国低代码市场达到28.5亿元。未来五年,中国低代码市场复合增长率为49.5%,2022年达到42.6亿元,2025年达到142.2亿元。

低代码有巨大的潜力和发展前景,Gartner机构甚至预测,到2025年企业70%的新应用将会通过低代码或者无代码技术开发。企业使用低代码开发平台,可以大大加快数智化进程,提升研发效率。


第二章 需求分析


本章通过对管理系统调研和分析,归纳并总结出适合管理系统场景的功能组件和页面模板,并对其维护功能进行需求分析,通过对传统开发模式调研,和已有低代码方式进行对比,阐述本系统中低代码模块需要具有的具体功能。最后对系统的可靠性、响应时间和页面兼容性等非功能性需求进行具体阐述。


2.1功能性需求

2.1.1组件库维护功能


在构建管理系统的过程中,尽管广为采用的AntDesign组件库提供了广泛的特性集,但仍有一些在实际应用中频繁出现但并未被库内直接包含的功能元素,例如具备编辑功能的表格、面包屑导航、具有权限管理功能的菜单栏、底部信息板块以及返回页面顶部等功能。

为了避免开发人员在遇到这些常见需求时每次都从零开始编写代码,导致代码重复和工作负担增加,我们系统地将这些在管理系统中广泛使用的功能元素整合进一个专门的组件库。

组件库维护功能的用例图如图 1.1 所示。



图1.1 组件库库维护用例图


2.1.2页面构建功能


本系统实现了一个基于JSON配置的低代码前端页面开发平台,其中包含大量在管理系统中常用的功能组件和页面模板。在选用某一组件或模板之前,用户需要先预览其样式,以确保能满足所需功能的需求。选定模板后,用户需阅读该模板的使用说明,并根据这些说明以及JSON文件的编写规范,来完成页面代码的编写。

低代码页面构建功能的使用流程图如图1.2所示,清晰地展示了这一过程的各个步骤和交互环节,使得用户能更方便地理解和使用该功能。



图1.2 低代码页面构建用例图

2.1.3流程表单构建功能



本系统实现了类似钉钉流程表单的功能,旨在简化和优化业务流程的设计与管理过程。该功能集成了表单设计、流程图绘制、任务分配与跟踪等多种工具,为用户提供了一个高效、直观的工作环境。流程表单构建功能的使用流程图如图1.3所示












图1.3 流程表单构建用例图



2.2非功能性需求


在需求分析环节,不仅要考虑功能性需求,还应当考虑系统的非功能性

需求,这对于确保软件产品能够高效稳定并且持续地为用户提供服务至关重要。因此还应考虑到系统的可靠性、系统性能和用户页面兼容性等非功能性需求。

(1)可靠性。一个软件产品在使用过程中可能因为网络或者硬件的原因发生故障,系统应当有相应的措施来保存用户当前数据,用户再次打开软件时可以直接恢复之前的操作。其次当用户输入的数据不合理时,系统应当有错误数据的处理能力,保证系统不会因此产生系统崩溃等问题。

(2)系统性能。根据前端开发的“2/5/10”原则,响应时间在 2s 之内则认为网站非常有吸引力,5s 内是比较有吸引力,而在 10 秒内则认为网站比较糟糕。因此在本系统中用户首次进入系统时页面加载时间应不超过 2s,单个简单请求的响应时间不应超过 1s,对于时间大于 5s 的复杂请求,应有明显的处理进度条展示。

(3)页面兼容性。由于每个使用者的设备屏幕宽度存在差异,为避免小屏幕造成页面内容堆叠、大屏幕中内容大量留白的情况,本系统应使用合适的页面布局方式,适配多种屏幕类型,提高用户体验。


第三章 系统详细设计

本章将详细阐述系统详细设计的各项内容,包括系统架构设计、模块设计、用户界面设计、数据库设计、安全设计以及错误处理和异常管理等关键方面。我们将以清晰的逻辑和结构化的方式,深入解析每个设计元素的功能、结构、接口和内部工作原理,确保所有设计元素都能精确匹配需求规格,并符合软件工程的最佳实践和标准。

3.1功能性需求

3.1.1 数据定义模块

数据定义模块,实际上就是数据库的DDL语句。该模块主要功能是创建更新低代码平台生成的数据库以及索引,提供平台需要的数据库表管理功能。

该数据定义模块是对象管理的底层实现,需要为对象管理模块提供以下功能:获取创建表sql、获取修改表sql、获取创建索引sql、获取修改索引的sql、获取删除表sql。该模块只负责根据对象信息生成相应的sql语句,不负责具体的操作数据库,操作数据库由数据操作模块实现。

在代码层面,需要根据以上信息创建一个接口,并根据当前默认的数据库PostgreSQL进行实现。该接口名可命名为:DatabaseService或者DataDefinitionService。

业务流程图如下:



3.1.2 数据操作模块


数据操作模块,实质是数据库的DML语句。该模块主要功能是操作数据的功能,即对数据进行增删改查。该模块还需要提供多表关联数据操作的功能,即对主数据以及其关联数据的增删改查功能。

在代码层面,需要根据以上信息创建一个接口,并根据当前默认的数据库PostgreSQL进行实现。该接口名可命名为:CrudService 或者DataOperationService。

业务流程图如下:


3.2系统基础功能模块

3.2.1用户管理

用户管理是通过低代码平台生成的基础功能模块,默认提供基础的id、用户名、姓名、性别、年龄、状态、密码、头像这几个基础字段,且是固定不变的,其余字段在开发时使用低代码平台的能力再进行添加以满足实际需求。


3.2.2权限管理

本系统采用基于角色的权限管理系统(RBAC)作为功能权限系统设计,同时再此基础上增加了前端权限这一概念。传统的RBAC模型中有角色,权限,用户3个对象,对于权限来说,通常指的是后端的api接口,即给角色绑定接口,再给用户绑定角色,这样用户就拥有了所绑定角色的权限(api接口)。但在复杂系统中,由于接口数量较大,同时页面上完成某个功能依赖的接口并非单一,并且接口这一概念对于用户来说不太友好,顾在此基础上增加了前端权限这一概念。

前端权限指的是用户所见的前端页面的可以进行权限控制的元素,包含模块,菜单,页面,按钮。一个前端权限可以是某一个模块,也可以是某一个菜单,也可以是某一个页面,也可以是某一个按钮。前端权限需要与后端权限进行绑定,假设某个前端权限为按钮,完成这个按钮的操作所用到的所有后端接口都需要与前端权限进行绑定。如下图所示:


在RBAC模型中,用前端权限来替换了原来的权限对象,这样使得整个RBAC模型对用户使用来说更加友好,因为在分配权限的时候,分配的权限就是页面上所见的东西,而不再是用户不懂的接口。

由于权限并非普通用户所使用的功能,所以系统中对前端权限的管理功能涉及较少,主要是用于展示,前端权限的数据来源更依赖于前端开发人员通过程序自动生成,以减少大量且重复的录入工作。不过对于超级管理员而言,修改前段权限拥有的后端权限也是必要的,所以系统应当支持对前端权限拥有的后端权限数据进行管理。

后端权限采用的是基于拦截器的自研权限管理系统,相较于shiro和security来说,使用更加简单,更贴合我们的项目。后端的权限验证流程如下:



3.2.3日志管理


业务操作日志功能依赖于接口管理模块,通过对接口配置操作说明实现具备可读语义的业务操作日志这一功能,设计如下:

在接口管理模块对接口进行管理时增加“业务操作日志”开启按钮;

该功能开启时,需要配置的字段有:说明模板、参数注入service;

说明模板是该操作的说明,例如“删除用户{{userFullName}}”,其中的{{userFullName}}是参数占位符,参数可以从入参和出参以及系统中获取,当配置了参数注入service后,也可以从该service注入的参数中获取。

业务流程图如下:



3.3低代码功能模块

3.3.1增删改查

顾名思义,增删改查即是对数据进行增删改查的操作。需要支持对单表数据以及多表数据的增删改查。例如,在查询用户信息时,可以连带的查询出其所在的部门数据以及角色数据,在新增修改用户数据时也可以同时修改其所在的部门数据和拥有的角色数据。该功能应当基于“数据库交互模块——数据库定义模块”进行封装即可。

对增删改查再进行细分,分别是:分页查询、列表查询、查询单个、新增、修改、删除、批量新增、批量修改、批量删除。

在代码层面,需要根据以上信息创建一个接口,并根据功能类型进行不同的实现。该接口名可命名为:ApiOperationTypeHandler。该接口需要包含一个数据操作的方法,可以命名为dbOperation,在该方法中调用数据操作模块的方法来操作数据。


3.3.2导入导出

导入导出是支持对数据的导入导出操作,需要支持对关联数据的导入导出,例如在导入用户数据时,可以连带导入用户所在的部门数据以及拥有的角色数据,导出时同理。

在代码层面,该功能与增删改查一致,只不过实现方式有区别,所以只需要实现ApiOperationTypeHandler接口即可。


3.3.3动态接口

平台默认提供了常用的数据接口,但常用的数据接口局限性比较大,例如在对用户进行修改时,很多字段都是必填项,假设现在的功能仅仅是修改有用户的状态,切换启用和禁用两个状态,实际上只需要传入用户id和状态即可,针对这种情况,提出了动态接口的概念。动态接口功能既是可以在线配置接口,包括接口的出参,入参,逻辑等数据。动态接口仅需要支持对单个数据以及其关联数据的有选择性的增删改查即可,复杂业务逻辑由在线脚本功能完成。

在代码层面,该功能需要依赖SpingMVC的RequestMappingHandlerMapping类,以下是其的简单介绍:

RequestMappingHandlerMapping是Spring MVC中的一个核心组件,它主要用于将请求映射到处理程序方法(handler method)。

当客户端发送请求时,RequestMappingHandlerMapping会根据请求URL、请求方法、请求头等信息来匹配处理程序方法。如果找到了匹配的方法,就会调用该方法并返回相应的结果。

RequestMappingHandlerMapping可以通过多种方式进行配置和自定义,包括:

使用@RequestMapping注解:可以在控制器类或处理程序方法上使用@RequestMapping注解,并设置value、method和headers等属性值来指定请求的URL、请求方法和请求头。

显式注册HandlerMethod:可以使用registerMapping()方法直接注册HandlerMethod对象,该对象包含了请求映射信息以及处理程序方法的引用。

实现RequestMappingInfo和HandlerMethodResolver接口:可以自定义RequestMappingInfo实现类和HandlerMethodResolver实现类,用于处理复杂的请求映射规则和动态查找处理程序方法。

我们使用registerMapping()方法来手动注册接口到SpringMVC中。根据registerMapping()方法的说明,我们需要编写相应的处理程序方法,为了符合MVC模式,我们可以将该类命名为CrudController,在该类中定义增删改查的方法。

为了实现参数处理和返回结果值的处理以及脚本功能,在执行具体方法的逻辑上可以使用责任链模式来进行编码,以此可以灵活的扩展处理程序。


3.3.4流程引擎



流程引擎是平台为了解决如何实现业务逻辑问题的另外一个方向,以工作流的形式来解决审批场景下的业务逻辑编排问题。

我们采用自研的流程引擎,以下是该流程引擎的简单介绍:


如上图所示,自研的流程引擎主要有5个元素,分别是:

开始节点:表示一个流程的开始,通常是流程图中的第一个节点。在执行流程图时,从此节点开始按照预定的流程顺序依次进入下一个节点。

扭转节点:也称为传输节点或交互节点,用于连接不同的流程元素,如任务、子流程、决策和其他节点。在执行流程过程中,扭转节点可以帮助流程的正常进行并确保流程的正确性。

结束节点:顾名思义,指示一个流程结束的节点,通常是流程图的最后一个节点。当执行到此节点时,流程将结束,并且不再继续向下执行。

系统动作:由系统自动执行的操作,例如从一个节点自动扭转到另一个节点。这些操作通常是预先设置好的,并且在整个流程执行期间都会执行。

用户动作:由用户手动执行的动作,例如审批、确认等。这些动作需要用户的干预,以更符合实际业务需求,它们往往会有多个选项,如通过、拒绝、驳回、转发等。

以下是用上述的流程元素画的流程图:




第四章 总结


本文首先对目前 Web 前端开发中存在的问题进行分析,之后对管理系统进行调研和分析,针对管理系统页面功能的重复性和结构的固定性,基于面向对象的开发思想和组件化的开发理念,通过对现有的网页快速构建工具调研和对比,提出一种基于低代码的、组件化的后台管理系统构建方案。基于 React 前端开发框架和AntDesign 组件库,设计并实现了低代码应用平台,并将其进行系统部署,在目前主流浏览器中对其进行功能性测试和非功能性测试,验证系统的可用性和可靠性,针对系统中的性能瓶颈给出优化方法,减少首屏时间,提供高用户使用体验



参考文献


[1]李嘉, 赵凯强, 李长云. Web 前端开发技术的演化与 MVVM 设计模式研究[J]. 电脑知识与技术:学术版, 2018(1Z):3.

[2]杜艳美. 基于 web 前端的性能优化框架模型研究[D]. 四川: 西南科技大学, 2018.

[3]邓超. WEB 前端应用组件化开发研究[J]. 中国科技期刊数据库 科研, 2016(11): 00042-00043.

[4]敖曼. 基于 react 实现前端组件化开发的研究与实现[J]. 长江信息通信, 2021, 34(7):4.

[5] Duckett J. Beginning html, xhtml, css, and javascript[M]. New Jersey: John Wiley & Sons, 2011.

项目名称:

重庆市科研院所绩效激励引导专项“面向数智化应用模块化适配的低代码开发平台研发及应用”


...


阅读全文