[草稿] 整体架构
Nebula 的完整形态由两套仓库协同组成:nebula 负责后端中台能力,nebula-portal 负责前端 Shell 和业务模块装载。理解这个关系后,很多“为什么这样分层”和“前后端怎么配合”的问题都会变得简单。
一张图理解
nebula-portal (前端工作台)
├── apps/shell # 登录、布局、动态菜单、权限、模块装载
├── packages/core # AppContext、权限、路由、事件总线、共享契约
├── packages/ui # 共享 UI 组件
└── apps/demo-business # 示例业务模块
│ HTTP / JSON / 文件上传
▼
nebula (后端中台)
├── nebula-app # 单体启动入口
├── nebula-gateway # 微服务统一入口和 OpenAPI 聚合
├── nebula-auth # 登录、用户、角色、菜单、按钮、权限
├── nebula-dict # 数据字典
├── nebula-param # 系统参数
├── nebula-notify # 公告、通知、站内信
├── nebula-storage # 文件上传、绑定转正、鉴权下载
├── nebula-comms # 飞书/企微/钉钉统一通信
└── nebula-base # Web、MyBatis、缓存、云调用等基础设施
后端平台的职责
后端不是只提供“业务接口”,而是在提供一组平台能力:
nebula-auth提供登录、用户、组织、角色、菜单、按钮和权限模型nebula-dict和nebula-param提供前端常用的字典和动态配置来源nebula-notify提供公告、通知模板、记录和站内信能力nebula-storage提供文件上传与正式文件管理nebula-comms提供企业 IM 统一接入nebula-gateway负责统一访问入口和文档聚合
这意味着前端不需要和一堆独立系统重新约定规范,而是围绕一个统一的中台接口风格工作。
前端基座的职责
nebula-portal 的核心不是一个普通管理后台,而是一个 Shell 化的中台前端基座:
apps/shell负责登录态恢复、会话刷新、布局、动态路由、异常页和模块加载packages/core对外暴露AppContext、权限判断、路由构建、事件总线等平台能力packages/ui沉淀共享页面容器、表格区域、表单抽屉、文件上传器等组件- 业务模块通过
PlatformModule注册菜单、组件和路由,再挂到 Shell 中运行
因此 Nebula 前端不是“每个业务模块独立造后台”,而是“业务模块挂到平台底座上”。
两种最常见的协作模式
模式一:单体快速启动
- 后端使用
nebula-app/nebula-app-starter - 前端使用
apps/shell - 适合本地开发、功能验证、团队快速上手
模式二:渐进式拆分
- 后端按需拆成
auth / dict / param / notify / storage / comms等独立服务 - 网关统一暴露
/api/...和/v3/api-docs/... - 前端继续使用同一个 Shell,对业务模块和远端服务的感知最小化
为什么这套结构适合中台
中台项目最容易出现的两个问题,是“能力散在不同系统里”以及“前后端每个项目都重复造轮子”。Nebula 的结构正好在解决这两个问题:后端把平台能力沉淀为标准模块,前端把通用交互沉淀为 Shell、Core 和 UI,新增业务时只需要在这套底座上扩展。