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-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篇展开请求全链路每一跳。

相关推荐
吠品2 小时前
Wine 在 Linux 上运行 Windows 软件完整指南
java·linux·服务器
亚历克斯神3 小时前
智能搜索系统的升级复盘——从 Elasticsearch 到混合检索的检索质量提升
java·spring·微服务
国科安芯4 小时前
ASL706S:让 MCU 不再“失忆跑飞“的守护芯片
分布式·单片机·嵌入式硬件·安全·fpga开发·架构
金銀銅鐵4 小时前
[Java] 一个方法最多可以有多少个入参?
java·jvm
哭哭啼5 小时前
JAVA服务问题诊断
java·开发语言·jvm
易番番ERP5 小时前
以销定采模式下,ERP如何帮助贸易企业管住订单真实利润
大数据·低代码·微服务·云原生·成本核算·易番番erp·以销定采
Sayuanni%35 小时前
SpringBoot 从注解到源码:核心知识点总结
java·spring boot·后端
坚定信念,勇往无前5 小时前
Maven 私有仓库-nexus
java
Minner-Scrapy6 小时前
Scrapy 2.17 源码解析:Scheduler 调度器与磁盘/内存双队列
java·爬虫·python·scrapy·网络爬虫·twisted
晚风醉蝶6 小时前
1-11-奇偶排序-OddEvenSort
java·数据结构·算法