Skip to content

领域驱动设计 ​

从业务语言和领域规则出发,用实体、值对象、聚合与上下文边界组织代码,并用可复现的实验检验每一个边界是否守得住。

从哪里开始

先读设计专题里的 从统一语言到限界上下文,它讲清了子域、限界上下文和防腐层。然后按顺序读本专题:事件风暴 和 领域建模 把业务讨论变成规则和模型;实体与值对象、聚合边界 和 分层 把模型放进代码;边界不止一个、持久化 和 上下文集成 处理模型与数据库、与其他上下文、与部署单元的关系;CQRS 按需阅读;最后在 精益切片与遗留改造 里看怎样在真实项目里开始。

这个专题讲什么 ​

很多项目说自己用了 DDD,证据是目录里有 domain、application、infrastructure,类名里有 Repository 和 AggregateRoot。顺着一个需求走下去,业务规则仍然散在控制器、服务、SQL 和定时任务里;同一个词在不同团队含义不同;表结构一改,领域对象跟着改;并发一来,规则被绕开。

这个专题关心的是知识进入代码的路径:业务人员和开发人员先用同一套语言描述问题,再把必须同时成立的规则放进明确的边界,最后用测试、事务和架构规则证明这些边界没有被绕过。分层、仓储、领域事件和 CQRS 都是可选的手段;统一语言、边界和规则的一致性才是主线。

统一案例 ​

所有文章使用同一个虚构的活动报名平台,每篇只截取其中一个问题:

上下文负责什么核心概念
活动发布活动和场次,设定容量活动、场次、容量
报名报名、候补、取消与递补场次聚合、报名、候补、参会人
计费应收、退款应收、付款人、金额
通知模板、渠道、投递通知、投递记录

报名是核心域,其余三个是支撑域或通用域。各篇的实验都在 codesphere-labs/ddd 中,可以用 make verify 复现。

什么时候不需要 ​

以增删改查为主、规则很少、上线后很少变化的模块,简单的分层和事务脚本就够了。DDD 的结构用来管理复杂性,复杂性不在那里时,结构本身就是负担。

文章 ​

相关专题 ​

  • 设计原则与模式 — 关注点分离、封装与组合、状态机与事件,是本专题的基础
  • Domain Driven Kit — 一个按四层结构组织的实现,文中多处与它的当前能力对照
  • 分布式与高并发 — 跨库查询、订单一致性等与上下文拆分相关的问题

文章以 CC BY-NC-SA 4.0 授权 · 代码片段以 MIT 授权