跳至正文
来两杯美式
返回

DDD 复杂业务系统设计(十):从战略到微服务,一张图跑通 DDD+中台+微服务

By 来两杯美式
发布于更新于

前言

前面 9 篇我们把 DDD 的核心概念、中台、微服务都拆开讲了。

这一篇我们把它们合起来:从战略设计开始,一步步走到微服务落地

一、DDD + 中台 + 微服务的关系

概念是什么解决什么问题
DDD 战略设计业务建模方法业务边界划分、领域模型
中台企业级能力复用通用能力沉淀、业务联通
微服务架构风格独立部署、技术异构、弹性伸缩

三者的关系

DDD 战略设计 ──→ 指导中台业务建模
DDD 战术设计 ──→ 指导微服务设计
中台 ──→ 落地的形式之一(也可以是单体)
微服务 ──→ 落地的形式之一(也可以是中台)

DDD 是方法论,中台和微服务是落地形式

二、从战略到微服务的完整流程

我用 5 步走完整个流程:

[步骤 1] 业务域分解为中台

[步骤 2] 中台归类(核心/通用/支撑)

[步骤 3] 事件风暴,建立领域模型

[步骤 4] 提炼并重构领域模型

[步骤 5] 领域模型映射为微服务

每一步展开讲。

步骤 1:业务域分解为中台

把整个企业业务按业务流程或功能属性拆成多个中台。

以在线教育平台为例:

在线教育业务域
├── 课程中台
├── 学习中台
├── 教学中台
├── 证书中台
├── 用户中台
├── 订单支付中台
├── 营销中台
└── ...

步骤 2:中台归类

按核心/通用/支撑归类:

中台归类说明
课程中台核心中台公司核心竞争力
学习中台核心中台用户体验关键
教学中台核心中台老师运营能力
证书中台核心中台证书业务是特色
用户中台通用中台各业务都需要
订单支付中台通用中台各业务都需要
营销中台通用中台各业务都需要

核心中台:自主研发,最强资源投入。 通用中台:可以借鉴开源或外购,标准化。

步骤 3:事件风暴,建立领域模型

对每个中台做事件风暴,找出实体、聚合、限界上下文。

以课程中台为例:

事件风暴
├── 参与者:教务、产品、技术
├── 事件列表:
│   - 课程已创建
│   - 章节已添加
│   - 课程已发布
│   - 课程已下架
├── 命令列表:
│   - 创建课程
│   - 添加章节
│   - 发布课程
│   - 下架课程
├── 领域对象:
│   - 课程(聚合根)
│   - 章节
│   - 课时
│   - 知识点
│   - 课程分类
├── 聚合:
│   - 课程聚合
├── 限界上下文:
│   - 课程内容上下文
│   - 课程分类上下文
└── 领域模型:{ 输出领域模型文档 }

步骤 4:提炼并重构领域模型

这一步是 DDD 的精髓。多个中台独立建模后,必然有重复或不一致

举例:

所以要扫描所有中台的领域模型,找出重复的对象,重构

跨中台扫描:
├── 课程中台的“讲师” ←→ 教学中台的“讲师”
│   → 应该是同一个对象 → 教学领域更全(包含排课、绩效)
│   → 教学领域为主,课程领域引用

├── 课程中台的“学员” ←→ 用户中台的“学员”
│   → 应该是同一个对象 → 用户中台为主

└── 学习中台的“学习进度” ←→ 教学中的“作业完成度”
    → 应该是同一个对象 → 学习中台为主

重构原则

步骤 5:领域模型映射为微服务

限界上下文 → 微服务

课程内容上下文  →  course-content-service(微服务)
课程分类上下文  →  course-category-service(微服务)
学员档案上下文  →  student-profile-service(微服务)

每个微服务:

到这一步,从业务到系统的完整链路打通了

三、一个完整案例:在线教育证书中台

我用一个证书中台走一遍完整流程。

业务背景

公司在多个业务线(K12、职业、企业内训)都会发证书。原来每个业务线自己做证书:

每套重复建设,证书模板管理混乱,用户体验差(用户要在不同地方查证书)。

步骤 1:业务域分解

把证书能力抽成独立中台

步骤 2:中台归类

证书中台归核心中台(证书业务是公司特色竞争力)。

步骤 3:事件风暴

事件列表:
- 课程已完成
- 学时已达标
- 考试已通过
- 证书已生成
- 证书已发放
- 证书已吊销

领域对象:
- 证书(聚合根)
- 证书模板
- 发放记录
- 证书类型
- 持证人引用

聚合:
- 证书聚合
  - 证书(聚合根)
  - 证书模板(值对象)
  - 发放记录

限界上下文:
- 证书模板上下文(管理模板)
- 证书发放上下文(管理发放、查询)

步骤 4:跨中台扫描

证书中台“持证人” ←→ 用户中台“学员”
→ 应该是同一个对象 → 引用用户中台的学员 ID

证书中台“学时” ←→ 学习中台“学习进度”
→ 引用学习中台的进度事件 → 通过领域事件同步

步骤 5:微服务落地

certificate-template-service  # 证书模板微服务
certificate-issuance-service  # 证书发放微服务

两个微服务通过领域事件协同:

学习中台                              证书中台
  │                                       │
  ├── 学习进度达成                       │
  │   ↓                                  │
  ├── 发布 CourseCompletedEvent ──→ 消息中间件
  │                                       │
  │                                       ├── 证书服务订阅事件
  │                                       ├── 检查学时达标
  │                                       ├── 生成证书
  │                                       ├── 发布 CertificateIssuedEvent
  │                                       ↓
  │                                       └── 通知学员

四、避坑要点

坑 1:领域模型一步到位

。领域模型需要多次迭代才能稳定。

正确做法

坑 2:中台过早抽象

。中台是业务发展到一定阶段才需要的。

判断标准

坑 3:忽略康威定律

康威定律系统结构反映组织结构

中台需要专门的中台团队

如果组织结构不调整,中台建不起来

坑 4:微服务拆太细

反例:一个 5 人的小项目,硬拆 20 个微服务。

正确做法

五、为什么 DDD 适合做这件事?

DDD 是目前唯一能同时覆盖业务建模和中台、微服务设计的方法论。

阶段DDD 提供的工具
业务梳理子域划分、核心/通用/支撑分类
业务建模通用语言、限界上下文、事件风暴
业务抽象领域模型、聚合
系统设计分层架构、战术设计模式
微服务落地限界上下文 → 微服务

这就是为什么 DDD 在中台时代被重新重视

📌 2026 年补注:上文写于 2020 年中台概念火热期。“中台时代”这一说法在 2022 年后已较少使用——阿里 2023 年的”1+6+N”拆分标志着中台战略的转向。但本文所讲的”DDD → 中台能力识别 → 微服务落地”方法论链条依然成立,只是”中台”这一中间层是否需要独立建设,需要根据公司规模和业务复杂度审慎评估。

六、总结

这一篇我们讲了:

下一篇是这个系列最后一篇:3 个实战中常被问到的典型问题(边界量化的标准 / 聚合与依赖倒置 / 事件一致性)。


分享这篇文章:
通过邮件分享这篇文章✓ 链接已复制
查看系列全部文章
  1. 01.DDD 复杂业务系统设计(一):为什么从“领域”开始,比从“数据库”开始更靠谱
  2. 02.DDD 复杂业务系统设计(二):领域与子域,把“学校/课程/学员”拆成三件事再说
  3. 03.DDD 复杂业务系统设计(三):限界上下文,为什么“课程”在教务和市场是两种东西
  4. 04.DDD 复杂业务系统设计(四):实体与值对象,把“学员”和“地址”放进代码的两种姿势
  5. 05.DDD 复杂业务系统设计(五):聚合与聚合根,一个“选课单”应该装多少东西
  6. 06.DDD 复杂业务系统设计(六):领域事件,让“作业提交”自动触发批改进度
  7. 07.DDD 复杂业务系统设计(七):分层架构,你的“业务代码”应该待在哪一层
  8. 08.DDD 复杂业务系统设计(八):整洁架构 vs 六边形架构 vs DDD 分层,我选哪一种
  9. 09.DDD 复杂业务系统设计(九):中台,在线教育平台到底应该共享什么
  10. 10.DDD 复杂业务系统设计(十):从战略到微服务,一张图跑通 DDD+中台+微服务
  11. 11.DDD 复杂业务系统设计(总结):从领域到微服务,一张图看懂 DDD 落地全流程

上一篇
设计模式之享元模式:共享细粒度对象,降低内存占用
下一篇
设计模式之外观模式:统一门面,简化子系统调用