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 + SqlBuilder,DataWindow.js 变成了 MetaGrid.vue,Row.java 的 _t/_o 语义在前端 useRowSet.ts 里原样复刻。


二、16个模块的职责

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

基础层(无内部依赖)

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

核心层

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

业务层

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

装配与启动层

模块 文件数 职责
browise-spring-boot-starter 4 条件装配------HSM优先/BC兜底/CryptoAspect AOP
browise-demo 11 启动应用------@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篇展开请求全链路每一跳。

相关推荐
需要8262 分钟前
容器化 Java:镜像瘦身与 JVM 容器感知(cgroup)
java·开发语言·jvm
Thomas.Sir14 分钟前
第2课:SpringBoot4.x 项目构建:Maven/Gradle配置详解,父工程与依赖管理
java·spring boot
譕痕20 分钟前
Rabbit 实例
java·开发语言·java-rabbitmq
weixin_4487717237 分钟前
使用Aspose给PDF添加水印
java·pdf
\光辉岁月/38 分钟前
7.system类
java·system类
SL_staff1 小时前
BI落地失败的3个技术断点:从数据接入、自助分析到服务闭环的工程实践
java·数据分析·数据可视化
大风起兮云飞扬丶1 小时前
Java——线程池
java·开发语言
驰骋工作流1 小时前
低代码平台的评估指标:从「上层建筑 / 基座」两层看驰骋BPM驰骋低代码低代码工作流引擎
低代码
喵个咪1 小时前
GoWind Kanban 拆解:看板拖拽背后——LexoRank、乐观锁与尽力而为广播
后端·架构·go
喵个咪1 小时前
GoWind OA 拆解:用 3000 行 Go 写一个够用的审批工作流引擎
后端·架构·go