政务低代码平台实战(总纲)------从元数据引擎到可视化设计器的五个关键决策
文章目录
非科班野生程序员,深耕政务信息化20年,这套自研低代码平台支撑过省级社保、跨省医保结算等核心民生系统。前面的系列文讲了框架层(IOC、AOP、路由、MyBatis),这篇开始拆解平台的上层建筑------低代码引擎。从元数据驱动SQL到可视化表单设计器,五个关键决策,全是政务场景踩坑后的实用解法。最后感谢豆包、智谱、OpenCode,决策是我做的,代码是我搓的,文字是他们总结的。
作者:许彰午(xuzhangwu)
前面的系列文讲了框架底座:自研IOC容器、注解路由、CGLIB代理AOP、MyBatis分页改造、MongoDB混合存储。这些是"怎么跑起来"的问题。
这个系列讲另一个问题:跑起来之后,业务人员能不能自己配表单、配查询、配报表,不找开发?
答案是能。但不是靠一个大而全的引擎,而是靠五个关键决策,串起一条从建表到设计器到运行的完整链路。
本系列与框架系列的关系
┌─────────────────────────────────────────────────────────┐
│ 框架系列(已完成,10篇) │
│ IOC容器 / 注解路由 / 统一入参 / AOP代理 / ASM参数名 │
│ ThreadLocal上下文 / MongoDB缓存 / MyBatis分页 │
│ Excel报表 / Activiti任意流转 │
├─────────────────────────────────────────────────────────┤
│ 低代码平台系列(本系列,5篇) │
│ │
│ ① ea01-ea05元数据引擎 ← 本系列核心 │
│ ② 运行时DDL建表 │
│ ③ CommonSQL通用CRUD │
│ ④ 可视化表单设计器 │
│ ⑤ 存DB与导JSP双输出 │
├─────────────────────────────────────────────────────────┤
│ 工作流系列(已完成) │
│ 万能表单引擎 / 流程任意流转 / 会签 / 相对部门 │
└─────────────────────────────────────────────────────────┘
框架系列解决"怎么跑",低代码系列解决"怎么配",工作流系列解决"怎么批"。
系列文目录
第1篇:5张表描述任意SQL------ea01-ea05元数据引擎设计
核心看点:用5张关系表描述一条完整的SQL语句------ea01存语句头(SELECT/INSERT/UPDATE/DELETE),ea02存FROM表,ea03存列,ea04存JOIN条件,ea05存WHERE条件。commonSql 类从元数据动态拼装SQL,Oracle和SQL Server自动方言切换,90%的查询不用写一行SQL。
适用场景:不想手写SQL,想用配置化管理所有数据访问的场景。
第2篇:政务表单动态建表------运行时DDL引擎,前端拖完字段后端直接建
核心看点:业务人员在页面上拖字段、选类型、点保存,后端DDL引擎自动建物理表、加主键约束、加注释、自动往ea01-ea05写元数据。建完表立即可查,零配置上线。Oracle和SQL Server切换只改一行IoC配置。
适用场景:政务表单需要动态建表的场景,建完表还要对接工作流和报表。
第3篇:CommonSQL------一个接口扛起所有CRUD
核心看点:前端传一个 sqlId + 参数,后端 CommonSQLcontrol 拿到 sqlId 后从缓存读ea01-ea05元数据,经 commonSql 拼装出完整SQL,PreparedStatement参数绑定执行。查询、分页、导出、增删改,一个Business搞定。
适用场景:前端只发 sqlId + JSON参数,后端自动完成所有数据操作。
第4篇:可视化表单设计器------拖拽、合并拆分、代码生成
核心看点:基于Dojo的前端设计器,支持表格创建/合并/拆分(类似Word),控件拖入单元格,属性面板实时编辑,自动生成查询/保存/增删改JS代码。政务审批表单格式复杂、布局不规则,固定行列方案搞不定,必须做自由布局。
适用场景:政务审批表单的可视化设计,业务人员能拖出复杂的合并单元格表单。
第5篇:双输出模式------设计器存DB与导出JSP的完整链路
核心看点:设计器有两条出路------存到数据库(t_form/t_field/t_el/t_elcol),运行时动态还原渲染;或导出成JSP文件写磁盘,t_form记录文件路径(type=3),运行时直接读文件。导出的JSP还能载回设计器继续编辑。
适用场景:开发阶段用DB动态渲染方便调试,上线后导JSP求性能,两种模式自由切换。
五个决策的统一原则
| 决策 | 原则 |
|---|---|
| ea01-ea05元数据引擎 | 把SQL从代码移到数据 |
| 运行时DDL | 建完表即刻可用,不留手工环节 |
| CommonSQL通用CRUD | 一个入口统一所有数据操作 |
| 可视化设计器 | 用业务人员能理解的方式描述表单 |
| DB+JSP双输出 | 开发阶段求灵活,上线后求性能 |
一句话:用元数据描述一切变化的东西,用设计器管理这些元数据。
表单字段会变、SQL会变、布局会变------这些不应该硬编码在代码里。用关系表描述它们,用设计器编辑它们,运行时动态生成,上线时可以选择导出静态文件。
这个低代码平台没有拖拽生成Java代码,没有DSL,没有编译步骤------就是关系表 + 运行时拼装。简单粗暴,但在政务场景里跑了十几年。
低代码平台全景图
┌─────────────────────────────────────────────────────────┐
│ 可视化设计器 │
│ formEdit.jsp(拖拽/合并/拆分/属性/事件) │
│ ↓ 保存 ↓ 导出JSP │
│ ┌─────────┐ ┌──────────┐ │
│ │ t_form │ │ .jsp文件 │ │
│ │ t_field │ │ .js文件 │ │
│ │ t_el │ └─────┬────┘ │
│ │ t_elcol │ │ │
│ └────┬────┘ │ │
│ │ type=1/2 │ type=3 │
├──────────────┼────────────────────┼─────────────────────┤
│ ↓ ↓ │
│ onlyFrom.jsp 读JSP文件输出 │
│ 动态渲染HTML │
│ ↓ │
│ ┌──────────────────────────────┐ │
│ │ CommonSQLcontrol │ │
│ │ 前端传 sqlId + 参数 │ │
│ │ ↓ │ │
│ │ commonSql 拼 SQL │ │
│ │ ↓ │ │
│ │ ea01~ea05 元数据(缓存) │ │
│ │ ↓ │ │
│ │ PreparedStatement 执行 │ │
│ │ ↓ │ │
│ │ DataStore 返回前端 │ │
│ └──────────────────────────────┘ │
│ ↓ │
│ ┌──────────────────────────────┐ │
│ │ DDL引擎(建表时触发) │ │
│ │ DDLop → DDLinterface │ │
│ │ → DDL_oracle_impl │ │
│ │ → DDL_mssql_impl │ │
│ │ 建表 + 自动注册ea01~ea05 │ │
│ └──────────────────────────────┘ │
│ ↓ │
│ ┌──────────────────────────────┐ │
│ │ 数据库(Oracle / SQL Server)│ │
│ └──────────────────────────────┘ │
└─────────────────────────────────────────────────────────┘
这个系列是我对自己低代码平台的架构复盘。如果你也在做低代码或者政务系统,欢迎评论区交流。
系列导航:
- 下一篇:第1篇:5张表描述任意SQL------ea01-ea05元数据引擎设计
- 框架系列:Java Web自研框架18年架构决策复盘(系列文总纲)
- 工作流系列:政务工作流实战(二)------BPMN画不出来的七个设计决策
作者:许彰午 | 非科班野生程序员,深耕政务信息化20年
标签: #Java #低代码 #元数据驱动 #表单设计器 #政务信息化 #自研框架