# 三层隔离架构 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 层 业务模块,每个模块独立自包含。模块间不能直接引用,只能通过接口或事件通信。 ## 为什么这样分? 1. **Kernel 可复用**:换一个项目,Kernel 可以直接搬过去 2. **App 可替换**:换数据库、换缓存,只改 App 层 3. **Modules 可删除**:删除一个业务模块,不影响其他模块和基础设施