amis4jweb前端低代码平台设计与实现

一、背景

经过前期的调研和需求相关的分析,基本确定了要做前端低代码平台,至于具体怎么做,如何实现,这里重点介绍一下基于百度Amis框架的前端低代码实现方案。

二、需求

2.1 核心需求

  1. 支持可视化页面管理项目,模块,API,API参数(vo,dto)
  2. 持久化API元数据信息
  3. 优先支持Amis DSL Json代码内容生成
  4. 支持导入解析PlantUML API文档构建整体API元数据信息(无需手工维护)

2.2 个性化需求

  1. 支持基于项目内置的代码生成
  2. 支持二次开发匹配企业对应的前端框架
  3. 支持代码段管理和代码模版管理,方便快速修改
  4. 支持按模块和按API级别两种维度导出生成的代码
  5. 支持按模块维度动态选择代码模版构建前端代码内容

2.3 非功能性需求

  1. 增量迭代的数据唯一性校验
  2. 优先构建前后端不分离的项目版本
  3. 管理表单界面可用性
  4. 二次开发的扩展性
  5. API元数据模型定义,方便模版定制

三、方案设计

3.1 表结构设计

amis4jweb前端低代码平台设计与实现

3.2 领域模型设计

amis4jweb前端低代码平台设计与实现

3.3 内部服务接口设计

amis4jweb前端低代码平台设计与实现

3.4 工程架构设计

3.4.1 业务架构图

amis4jweb前端低代码平台设计与实现这里简单介绍下上面的业务架构图,总体来说是一个单体项目,包含了前后端内容,与前端相关的内容则以MVC架构来进行快速构建,在controller层面提供了纯API和页面路由API,同时采用了传统的模式让参数模型与表结构基本对应。Web代码生产核心服务的上层则是CURD对应的服务层,采用纯Service的方式直接对接基础设施层。在Service里调用web代码生产引擎服务,核心服务与CURD服务进行接口隔离实现了DDD的方式建设web代码引擎结合MVC的架构风格。

3.4.2 模块设计与说明

amis4jweb前端低代码平台设计与实现上图有些需要说明的地方如下:

  1. 开发过程中优先构建的前后端不分离页面,然后构建前后端分离项目,以前后端分离项目为主
  2. amis4j-web下的配置文件夹ftl是在项目启动时从数据库中读取ftl的模版动态生成的文件存放的地方
  3. webapp-model则是存放不同项目的后端本地化文件夹,开发和自己用的时候可以用到,web化不需要
  4. webcode是存放不同项目构建出的代码

3.4.3 前后端不分离方案

整体思路:基于百度Amis 框架做前端的单页应用。后端采用SpringBoot MVC的模式来响应并控制页面跳转。

  1. 优点

方便快速结合Amis的demo做html文件格式的单页应用,前端内容上手难度进一步降低。服务启动即可访问页面,方便开发和调试。

  1. 缺点

Amis Json与页面耦合,CURD相关的JSON内容都放一起,不好修改。前端没有热更新的能力,一旦需要修改更新则需要重新启动服务。Amis单页应用无法撑起整个管理系统的web端。

3.4.4 前后端分离方案

整体思路:基于Amis 的多页App的demo快速搭建web端管理系统,废弃后端Model路由功能,后端退化为纯后端API应用。

  1. 优点

    基于demo可以快速调试前后端API如何交互,快速开发具体业务代码 符合web端管理系统的界面风格,前后端分离 前端基于开发者模式可以快速进行热部署,修改即可见,可快速调整业务代码。

  2. 缺点

    需要了解Amis 多页App的文件内容,相关路由和json内容的职责等。没有加入社区沟通群,出现问题可能无法及时解决。

四、业务流程

4.0 PlantUML API 文档样例

amis4jweb前端低代码平台设计与实现文档内容说明:在前端PlantUML API文档中参考了之前做后端低代码平台的设计,增加了一些扩展字段,同时对于web Api而言则有一些特定的书写方式:比如UserApi,要以Api结尾,Api的具体方法不用包裹ResultDto,同时尽可能的把Api信息描述完整。比如方法参数,url,请求方式。扩展字段说明:searchKeyList:属性是否在分页列表中进行查询 excludeUpdate:在表单数据修改的场景是否不渲染对应属性 excludeInsert:在表单数据新建的场景是否不渲染对应属性 notRequireKeyList:在表单新建和修改的场景中是否不必填 input-text:对应web框架自己可以识别的表单元素组件,这里是amis的输入框组件 select: 同input-text,是amis的下拉框组件 templateJsonKey: 如果是模块级别,集成(Curd)整体界面的话,可以自定义模版,表明该模块使用对应的模块级代码模版进行构建。

4.1 API元数据构建流程

amis4jweb前端低代码平台设计与实现
API元数据构建流程.png

4.2 代码生成流程

amis4jweb前端低代码平台设计与实现
代码生成流程.png

4.3 模版配置与使用流程

为了实现模版的动态化配置,这里将API元数据的核心模型与变量关联起来,在生成代码的时候动态构建变量列表,加载模版之后即可构建代码。以下是API元数据模型字段列表和新增模版说明。

4.3.1 API元数据模型字段列表

变量编码 变量描述 json格式 freemarker格式 数据用例(Amis)
projectDevUrl 项目开发环境链接 $projectDevUrl ${projectDevUrl} http://localhost.dev.com
projectTestUrl 项目测试环境链接 $projectTestUrl ${projectTestUrl} http://localhost.test.com
projectPreUrl 项目预发环境链接 $projectPreUrl ${projectPreUrl} http://localhost.pre.com
projectProUrl 项目生产环境链接 $projectProUrl ${projectProUrl} http://localhost.pro.com
moduleRouteUrl 模块路由链接 $moduleRouteUrl ${moduleRouteUrl} /user/manager
moduleTitle 模块标题 $moduleTitle ${moduleTitle} 用户管理
moduleCode 模块编码 $moduleCode ${moduleCode} user
moduleContext 模块上下文名称 $moduleContext ${moduleContext} userContext
moduleList 模块信息列表 $moduleList ${moduleList}
insertApiTitle 保存api标题 $insertApiTitle ${insertApiTitle} 新增用户信息
updateApiTitle 修改api标题 $updateApiTitle ${updateApiTitle} 修改用户信息
detailApiTitle 查询api标题 $detailApiTitle ${detailApiTitle} 查看用户详情
insertForm 插入-表单元素内容 $insertForm ${insertForm}
updateForm 修改-表单元素内容 $updateForm ${updateForm}
detailForm 查看-表单元素内容 $detailForm ${detailForm}
pageForm 分页列表-表单元素内容 $pageForm ${pageForm}
insertApi 插入的api资源 $insertApi ${insertApi} /user/save
updateApi 修改的api资源 $updateApi ${updateApi} /user/update
detailApi 获取单条数据的api资源 $detailApi ${detailApi} /user/getById
pageApi 分页列表查询的api资源 $pageApi ${pageApi} /user/page
deleteApi 删除的api资源 $deleteApi ${deleteApi} /user/deleteById
deleteBatchApi 批量删除的api资源 $deleteBatchApi ${deleteBatchApi} /user/deleteBatch
updateBatchApi 批量修改的api资源 $updateBatchApi ${updateBatchApi} /user/updateBatch
listApi 列表查询api资源 $listApi ${listApi} /user/list
exportApi 数据导出api资源 $exportApi ${exportApi} /user/export
importApi 数据数据导入api资源 $importApi ${importApi} /user/import
insertApiParam 插入api参数 $insertApiParam ${insertApiParam} { “type”: “input-text”, “name”: “chineseName”, “label”: “用户姓名”, “required”: true }, { “type”: “input-text”, “name”: “age”, “label”: “用户年龄” }, { “type”: “input-text”, “name”: “phone”, “label”: “电活”, “required”: true }
updateApiParam 修改api参数 $updateApiParam ${updateApiParam} { “type”: “text”, “name”: “chineseName”, “label”: “用户姓名”, “required”: true }, { “type”: “input-text”, “name”: “age”, “label”: “用户年龄” }, { “type”: “input-text”, “name”: “phone”, “label”: “电活”, “required”: true }
detailApiParam 单条详情api参数 $detailApiParam ${detailApiParam} { “type”: “text”, “name”: “chineseName”, “label”: “用户姓名” }, { “type”: “text”, “name”: “age”, “label”: “用户年龄” }, { “type”: “text”, “name”: “phone”, “label”: “电活” }
pageApiParam 分页列表详情api参数 $pageApiParam ${pageApiParam} { “type”: “text”, “name”: “chineseName”, “label”: “用户姓名”, “searchable”: { “type”: “input-text”, “name”: “chineseName”, “placeholder”: “输入用户姓名” } }, { “type”: “text”, “name”: “age”, “label”: “用户年龄” }, { “type”: “text”, “name”: “phone”, “label”: “电活” }
listApiParam 列表详情api参数 $listApiParam ${listApiParam} { “type”: “text”, “name”: “chineseName”, “label”: “用户姓名” }, { “type”: “text”, “name”: “age”, “label”: “用户年龄” }, { “type”: “text”, “name”: “phone”, “label”: “电活” }

4.3.2 新增模版说明

在新增模版的时候模版内容涉及到的变量需要从上面的列表中获取,否则可能无法渲染到,新增的时候需要指定模版格式和输出内容的格式,方便构建代码文件。

五、界面展示

在实现部分为了让大家更直观的感受到该平台的实现效果,这里截了几张图,看一下具体是什么样子,怎么用。

5.1 前后端不分离界面

启动服务访问http://127.0.0.1:8084/start,这里相当于首页菜单页面。amis4jweb前端低代码平台设计与实现如下是项目配置页面:amis4jweb前端低代码平台设计与实现

5.2 前后端分离界面

amis4jweb前端低代码平台设计与实现amis4jweb前端低代码平台设计与实现amis4jweb前端低代码平台设计与实现amis4jweb前端低代码平台设计与实现

六、未来规划&总结

6.1 未来规划

  1. 支持复杂表单的构建,提升代码生成的丰富度
  2. 支持项目模型中的枚举识别和管理,提升代码生成完整度
  3. 支持表字段结构信息与参数信息结合提升代码生成精确度
  4. 构建除amis的其他web框架代码的基本CURD模版,提升代码生成广度。
  5. 完善不同web框架的组件,容器的模型定义
  6. 支持plantUML文件增量归档

6.2 总结

  1. 运用MVC架构为后端代码生成引擎提供一个可视化的壳。
  2. 学习并运用了Amis低代码框架来构建一个前端低代码生成平台
  3. 结合DDD和之前其他项目的实现思路先构建核心模型和服务,然后实现web化。
  4. 将模板动态化,提炼API元模型变量,使生成的代码更灵活更符合实际使用需求。
  5. 设计初期遗留了一些冗余的Bean和demo代码,需要删除和优化。
  6. 项目主页: https://gitee.com/sky-painting/amis4j


原文始发于微信公众号(神帅的架构实战):amis4jweb前端低代码平台设计与实现

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/241428.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!