分层架构演进
用途:理解各种分层风格从何而来、各自解决什么问题
演进主线
「演进主线」小节链接| 阶段 | 形态 | 解决的问题 | 遗留问题 |
|---|---|---|---|
| 1 | 单体一段式脚本 | 快速实现 | 无结构,规模一大即失控 |
| 2 | 三层(表现/业务/数据) | 代码归类、职责初分 | 依赖方向可反向渗透,业务层依赖 SQL 细节 |
| 3 | 四层(+ 领域层) | 业务规则集中、可测试 | 仍可能出现领域层依赖基础设施 |
| 4 | 依赖倒置(端口在内部) | 领域层不依赖技术细节 | 端口/适配器概念未显式化 |
| 5 | 六边形 / 洋葱 / 整洁架构 | 显式化“核心与外围”,适配器可替换 | 小系统过度设计的风险 |
| 6 | 组件化与模块化单体 | 在单进程内固化模块边界 | 需要构建期约束支撑 |
| 7 | 微服务 | 独立部署与团队自治 | 分布式复杂度、数据一致性 |
一条贯穿的原则
「一条贯穿的原则」小节链接依赖指向稳定的一侧:业务规则最稳定,技术细节最易变,因此代码依赖必须从技术细节指向业务规则,而不是相反。Robert C. Martin 的依赖规则(源码依赖只能朝内)是同一件事的不同表述。
分层数量不是目标
「分层数量不是目标」小节链接层数的意义只在一个地方:让“改哪里不影响哪里”成为可验证的事实。如果加了层却没有约束依赖方向,分层只是目录结构。
反过来,如果模块本身极简(配置管理、字典维护),三层以内完全合理——按子域价值分级投入。
与部署架构的关系
「与部署架构的关系」小节链接分层是代码结构问题,微服务是部署与组织问题,两者正交:单体可以有漂亮的分层,微服务也可能每层都混乱。先解决结构,再决定部署粒度,是更稳的顺序。
常见误区
「常见误区」小节链接| 误区 | 修正 |
|---|---|
| 层数越多越架构 | 以“隔离变化的能力”衡量,不以层数衡量 |
| 只有目录分层没有依赖约束 | 引入架构测试,违反即在 CI 失败 |
| 每一层都要建一套模型 | 只在跨边界处转换(对外协议、持久化结构、领域模型) |
| 把 ORM 实体当领域模型 | 至少保证持久化对象不进入应用与接口层 |
| 简单模块强行套四层 | 按复杂度分级,允许事务脚本风格 |
延伸阅读
「延伸阅读」小节链接- Robert C. Martin《Clean Architecture》(依赖规则)
- Alistair Cockburn 关于 Hexagonal Architecture 的原始文章
- Eric Evans《领域驱动设计》第 13 章(分层架构与其局限)
- Vaughn Vernon《实现领域驱动设计》第 11 章(架构与基础设施关注点)