Skip to content

三层隔离架构 ​

MengStack 采用三层隔离架构,从外到内依次为:Kernel → App → Modules。

架构总览 ​

┌─────────────────────────────────────────────────┐
│                   Modules                        │
│  ┌─────────┐ ┌─────────┐ ┌─────────┐           │
│  │  Auth   │ │  Org    │ │  User   │  ...       │
│  └────┬────┘ └────┬────┘ └────┬────┘           │
│       │           │           │                  │
├───────┼───────────┼───────────┼──────────────────┤
│       └───────────┼───────────┘                  │
│                    │                              │
│                  App                              │
│  ┌──────────┐ ┌──────────┐ ┌──────────┐         │
│  │ Database │ │  Cache   │ │Middleware│  ...     │
│  └────┬─────┘ └────┬─────┘ └────┬─────┘         │
│       │            │            │                 │
├───────┼────────────┼────────────┼────────────────┤
│       └────────────┼────────────┘                 │
│                    │                              │
│                 Kernel                            │
│  ┌──────────┐ ┌──────────┐ ┌──────────┐         │
│  │ Response │ │  Error   │ │ Paginator│  ...     │
│  └──────────┘ └──────────┘ └──────────┘         │
│                                                  │
└──────────────────────────────────────────────────┘

依赖规则 ​

只能从上到下依赖,禁止反向依赖。

层可以依赖禁止依赖
ModulesApp, Kernel其他 Modules
AppKernelModules
Kernel标准库App, Modules

Kernel 层 ​

零业务语义的基础组件。判断标准:这个组件是否知道"用户"、"租户"、"订单"等业务概念? 如果知道,它就不属于 Kernel。

Kernel 提供的都是纯粹的技术工具:

  • 统一响应格式
  • 通用错误类型
  • 分页工具
  • 字符串/时间工具

App 层 ​

应用基础设施,负责连接外部世界:

  • 数据库连接(GORM + PostgreSQL)
  • 缓存连接(Redis)
  • 全局中间件
  • 健康检查

App 层可以引用 Kernel,但不知道任何业务模块的存在。

Modules 层 ​

业务模块,每个模块独立自包含。模块间不能直接引用,只能通过接口或事件通信。

为什么这样分? ​

  1. Kernel 可复用:换一个项目,Kernel 可以直接搬过去
  2. App 可替换:换数据库、换缓存,只改 App 层
  3. Modules 可删除:删除一个业务模块,不影响其他模块和基础设施