01-总纲:16个模块的低代码平台长什么样

01-总纲:16个模块的低代码平台长什么样

browise 是一个跑了14年、经过3个生产级政务项目(海南新农保、海南异地就医、海口海关内控)验证的低代码平台,最终形态是 Spring Boot 2.7 + Vue3 + 16个Maven模块。这篇文章是整个系列的地图——每个模块是什么、依赖关系怎么排、一个请求怎么穿过它们。


一、项目背景:三代演化

browise 不是从零设计出来的。它有一条清晰的演化链:

第一代(2010前后)  PowerBuilder C/S 应用
     │ DataWindow 数据窗口思想在这里形成
     ▼
第二代 wiserise     Java + 自研 route.java 前端控制器 + Activiti 5.13
     │ 615个Java文件,海口海关内控系统生产运行
     │ commonSql.java 2135行的元数据SQL引擎
     ▼
第三代 browise      Spring Boot 2.7 + Vue3 + 16模块
       667个单测100%通过,Playwright E2E 79/79

第三代的重写不是推倒重来——PROJECT.md 里有一张完整的 wiserise→browise 迁移映射表:commonSql.java 拆成了 EaEngine + SqlBuilderDataWindow.js 变成了 MetaGrid.vueRow.java_t/_o 语义在前端 useRowSet.ts 里原样复刻。


二、16个模块的职责

打开根目录 pom.xml,modules 段落定义了全部16个模块。按依赖层次从底到顶:

基础层(无内部依赖)

模块文件数职责
browise-common20Result统一响应、BrowiseException、政务工具集(IdcardUtil/RMBUtil/PinyinUtil/DesensitizeUtil)
browise-crypto16国密SM2/SM3/SM4——接口+BC/HSM双实现策略模式

核心层

模块文件数职责
browise-metadata42EA元数据SQL引擎——五张表描述任意SQL,8方言,字段级SM4加密+脱敏
browise-data24数据协议——Row(_t/_o)/RowSet三缓冲/BaseEntity/MyBatisHelper

业务层

模块文件数职责
browise-platform67认证(JWT双令牌)/用户/角色/菜单RBAC/文件(MinIO)/导出
browise-workflow66Flowable 6.8集成——手动构建引擎、会签、委托、拦截器链
browise-formbuilder20表单设计器后端——EA元数据管理(EaAdminController 39.1KB全项目最大)
browise-report11POI模板引擎(指令解释器)/PDF水印
browise-audit19三表审计——ZE01操作/ZE02行快照/ZE03字段diff
browise-dict11字典缓存——ConcurrentHashMap.computeIfAbsent
browise-notify11通知——SPI(META-INF/services)注册渠道
browise-ops7在线SQL运维——DDL预览备份/影响行数熔断
browise-cms63内容管理——文章/问卷/投票/评论,发布走工作流
browise-mail22邮件——IMAP收取/SMTP发送/多账号

装配与启动层

模块文件数职责
browise-spring-boot-starter4条件装配——HSM优先/BC兜底/CryptoAspect AOP
browise-demo11启动应用——@MapperScan六包/WebSocket/BPMN自动部署

加前端 browise-vue/(core 9文件 + components 76文件 + demo 53页)。


三、模块依赖的关键设计:data不依赖crypto

BROWISE-GUIDE.md 里明确记录了一条依赖原则:browise-data 不依赖 browise-crypto

为什么?data模块的 BaseEntity 是业务实体的基类,它的 save() 需要在写库前做字段加密。如果 data 直接依赖 crypto,那么所有用 BaseEntity 的项目都被迫引入国密依赖——即使它根本不需要加密。

解法是 EntityLifecycleListener 接口(987B):

browise-data 定义接口:
  interface EntityLifecycleListener {
      beforeSave(entity)
      afterQuery(entity)
  }

browise-spring-boot-starter 桥接:
  CryptoEntityLifecycleListener implements EntityLifecycleListener {
      // 内部调 CryptoHelper 的签名+加密
  }

starter 负责把 crypto 的能力"注入"到 data 的生命周期里——两个模块互相看不见,靠一个接口契约协作。这是依赖倒置在模块划分上的应用。


四、一个请求穿过哪些模块

浏览器
  │ POST /ea/page/SYS_USER_s
  ▼
JwtAuthFilter (platform模块)
  │ 验token → 黑名单 → CurrentUser.set → 菜单鉴权
  ▼
EaController (formbuilder模块)
  │ /ea/page/{sqlId} 接收请求
  ▼
EaEngine (metadata模块)
  │ ①EaMetadataCache查EA01-05元数据
  │ ②SqlBuilder按方言拼SQL
  │ ③EaConnectionProvider拿连接执行
  │ ④postProcess: 字段解密+脱敏
  │ ⑤SlowSqlMonitor计时
  ▼
Oracle (ojdbc8)
  │
  ▼
Result { code, msg, data } (common模块)
  │
  ▼
前端 useRowSet (browise-vue)
  │ rows灌入primary缓冲,_t全为0
  ▼
MetaGrid渲染

一次分页查询穿过 4 个后端模块 + 2 个前端核心文件。后续每一篇都在拆解这条链上的某一段。


五、规模盘点

分类数量
后端Java~290文件 / ~18,000行
前端Vue+TS~100文件 / ~12,000行
测试代码~70文件 / ~7,600行(667单测+Playwright三套E2E)
建表脚本13个(doc/目录)

667个单测100%通过,含15个Oracle集成测试(真实连库验证EA01≥74条元数据、审计三表写入)。


六、系列规划

这个系列59篇,按数据流顺序拆:

主题篇数
全景与设计哲学4
EA元数据引擎12
数据协议8
认证与安全10
工作流9
前端组件库9
周边模块4
工程实践3

每篇绑定真实源码路径,代码占比不低于40%。


✅ 亮点:以模块依赖图+请求全链路两张地图组织16个模块的介绍,点出"data不依赖crypto靠starter桥接"这条最关键的架构决策。适合想了解多模块低代码平台怎么分层的技术负责人。扩展方向:第02篇拆DataWindow设计哲学、第04篇展开请求全链路每一跳。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值