三层隔离架构
MengStack 采用三层隔离架构,从外到内依次为:Kernel → App → Modules。
架构总览
┌─────────────────────────────────────────────────┐
│ Modules │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │ Auth │ │ Org │ │ User │ ... │
│ └────┬────┘ └────┬────┘ └────┬────┘ │
│ │ │ │ │
├───────┼───────────┼───────────┼──────────────────┤
│ └───────────┼───────────┘ │
│ │ │
│ App │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ Database │ │ Cache │ │Middleware│ ... │
│ └────┬─────┘ └────┬─────┘ └────┬─────┘ │
│ │ │ │ │
├───────┼────────────┼────────────┼────────────────┤
│ └────────────┼────────────┘ │
│ │ │
│ Kernel │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ Response │ │ Error │ │ Paginator│ ... │
│ └──────────┘ └──────────┘ └──────────┘ │
│ │
└──────────────────────────────────────────────────┘依赖规则
只能从上到下依赖,禁止反向依赖。
| 层 | 可以依赖 | 禁止依赖 |
|---|---|---|
| Modules | App, Kernel | 其他 Modules |
| App | Kernel | Modules |
| Kernel | 标准库 | App, Modules |
Kernel 层
零业务语义的基础组件。判断标准:这个组件是否知道"用户"、"租户"、"订单"等业务概念? 如果知道,它就不属于 Kernel。
Kernel 提供的都是纯粹的技术工具:
- 统一响应格式
- 通用错误类型
- 分页工具
- 字符串/时间工具
App 层
应用基础设施,负责连接外部世界:
- 数据库连接(GORM + PostgreSQL)
- 缓存连接(Redis)
- 全局中间件
- 健康检查
App 层可以引用 Kernel,但不知道任何业务模块的存在。
Modules 层
业务模块,每个模块独立自包含。模块间不能直接引用,只能通过接口或事件通信。
为什么这样分?
- Kernel 可复用:换一个项目,Kernel 可以直接搬过去
- App 可替换:换数据库、换缓存,只改 App 层
- Modules 可删除:删除一个业务模块,不影响其他模块和基础设施

