Malize's blog Malize's blog
首页
  • 设计模式

    • 设计模式总览
    • 工作中用到的设计模式
  • 并发编程

    • 死锁
  • 技术文档

    • Docker 核心命令大全
    • Markdown 使用教程
    • npm 常用命令
    • yaml 语言教程
    • Nodejs 递归读文件
  • DDD 领域驱动(基础)

    • DDD 是什么
    • 领域、子域与限界上下文
    • 实体、值对象与聚合
    • 领域事件
    • 分层架构与架构模型
  • DDD 领域驱动(实战)

    • DDD、中台与微服务
    • 事件风暴与中台建模
    • 微服务代码模型
    • 边界、视图与微前端
    • 设计实例与拆分原则
    • 分布式架构关键设计10问
  • 学习笔记总览
  • 入门
  • 部署
  • 进阶
  • 集成
  • 优化
  • 面试
  • 构造问答系统

    • 项目背景
    • 构建答疑机器人
    • 扩展知识范围
    • 优化提示词
    • 自动化评测
    • 优化 RAG 应用
  • 构建 Agent 系统

    • Agent 基础与工具调用
    • 规划与执行
    • 多 Agent 团队协作
    • Memory 积累经验
    • Skill 可复用流程
    • Qwen Code 实践
  • 交付上线

    • 走向生产环境
    • 模型蒸馏
    • 部署模型
    • 生产实践
    • 安全合规
  • 工具手册

    • OpenClaw 命令速查
  • 规范 & 实践

    • 代码规范
    • sharding-jdbc
    • CIM 半导体行业
    • HTML 常用 meta
    • CSS 技巧收藏
  • 微服务

    • feign原理
  • Git

    • Git 笔记总览
    • Git 使用手册
    • Git 修改分支名
    • 团队 Git 分支规范
  • GitHub & 博客

    • GitHub 高级搜索技巧
    • GitHub Actions 自动部署
    • 博客搭建 - 百度收录
  • 优质网站
  • 前端库推荐
  • 成长学习

    • 学习方法
    • 英语学习:奥格登 850 词
    • 敏捷开发实战
    • 提示词工程
  • 生活

    • 实用技巧
    • 心情杂货
    • 梦境与灵感
  • 技术问题

    • 面试问题备忘
  • 索引

    • 分类
    • 标签
    • 按年归档
GitHub (opens new window)

Malize

持续学习,持续成长
首页
  • 设计模式

    • 设计模式总览
    • 工作中用到的设计模式
  • 并发编程

    • 死锁
  • 技术文档

    • Docker 核心命令大全
    • Markdown 使用教程
    • npm 常用命令
    • yaml 语言教程
    • Nodejs 递归读文件
  • DDD 领域驱动(基础)

    • DDD 是什么
    • 领域、子域与限界上下文
    • 实体、值对象与聚合
    • 领域事件
    • 分层架构与架构模型
  • DDD 领域驱动(实战)

    • DDD、中台与微服务
    • 事件风暴与中台建模
    • 微服务代码模型
    • 边界、视图与微前端
    • 设计实例与拆分原则
    • 分布式架构关键设计10问
  • 学习笔记总览
  • 入门
  • 部署
  • 进阶
  • 集成
  • 优化
  • 面试
  • 构造问答系统

    • 项目背景
    • 构建答疑机器人
    • 扩展知识范围
    • 优化提示词
    • 自动化评测
    • 优化 RAG 应用
  • 构建 Agent 系统

    • Agent 基础与工具调用
    • 规划与执行
    • 多 Agent 团队协作
    • Memory 积累经验
    • Skill 可复用流程
    • Qwen Code 实践
  • 交付上线

    • 走向生产环境
    • 模型蒸馏
    • 部署模型
    • 生产实践
    • 安全合规
  • 工具手册

    • OpenClaw 命令速查
  • 规范 & 实践

    • 代码规范
    • sharding-jdbc
    • CIM 半导体行业
    • HTML 常用 meta
    • CSS 技巧收藏
  • 微服务

    • feign原理
  • Git

    • Git 笔记总览
    • Git 使用手册
    • Git 修改分支名
    • 团队 Git 分支规范
  • GitHub & 博客

    • GitHub 高级搜索技巧
    • GitHub Actions 自动部署
    • 博客搭建 - 百度收录
  • 优质网站
  • 前端库推荐
  • 成长学习

    • 学习方法
    • 英语学习:奥格登 850 词
    • 敏捷开发实战
    • 提示词工程
  • 生活

    • 实用技巧
    • 心情杂货
    • 梦境与灵感
  • 技术问题

    • 面试问题备忘
  • 索引

    • 分类
    • 标签
    • 按年归档
GitHub (opens new window)
  • 技术文档

  • GitHub技巧

  • Nodejs

  • 博客搭建

  • CIM

  • 代码规范

  • 前端基础

  • 微服务

  • Git

  • 数据库

  • DDD领域驱动

    • DDD是什么:为什么微服务设计要选择DDD
      • 一、微服务拆分的老大难问题
      • 二、DDD 和微服务的时间线
      • 三、DDD 的两大块:战略设计和战术设计
      • 四、从业务到微服务的三步走
      • 五、DDD 不是银弹,几点提醒
      • 六、我的理解
    • 领域、子域与限界上下文
    • 实体、值对象、聚合与聚合根
    • 领域事件:微服务解耦的关键
    • DDD分层架构与微服务架构模型
    • DDD、中台与微服务的铁三角
    • 事件风暴与中台业务建模实战
    • DDD微服务代码模型设计
    • 微服务的边界、数据视图与微前端
    • 微服务设计实例与拆分原则
    • 分布式架构关键设计10问
  • Elasticsearch

  • 技术
  • DDD领域驱动
malize
2026-08-03
目录

DDD是什么:为什么微服务设计要选择DDD

# DDD 是什么:为什么微服务设计要选择 DDD

学习《DDD实战课》(欧创新)的笔记,结合自己的理解整理。这是第一篇,先把"DDD 到底解决什么问题"讲清楚。

# 一、微服务拆分的老大难问题

做过微服务的团队基本都吵过一个问题:服务到底拆多细?边界划在哪?

我见过的典型场景:几个人对着一个单体系统讨论拆分方案,每个人按自己的理解拆出来的服务都不一样,谁也说服不了谁,最后靠拍脑袋定,上线之后运维天天救火。

问题的根源不是技术,而是——没人说得清业务的边界在哪里。连微服务概念的提出者 Martin Fowler 都没告诉大家该怎么拆。所以就出现了两种极端:

  • 把单体拆成几个部署包就自称微服务
  • 无脑拆细,越小越好,结果复杂度爆炸,上线都费劲

而 DDD(领域驱动设计)恰好就是解决"边界"问题的方法论。

# 二、DDD 和微服务的时间线

有个挺有意思的事:DDD 是 2004 年 Eric Evans 在《领域驱动设计》里提出的,比微服务早了差不多十年。但 DDD 提出后很长时间都是"雷声大雨点小",直到微服务火了,大家发现拆分没有章法,回头一看——DDD 的领域边界思想正好能指导微服务拆分,这才真正流行起来。

一句话总结两者的关系:

DDD 负责"往哪拆"(业务边界),微服务负责"怎么跑"(技术落地)。

DDD 微服务
本质 架构设计方法论 架构风格
关注点 领域边界划分、领域建模、业务与代码一致性 进程间通信、容错隔离、独立部署
视角 业务视角 运行时视角

# 三、DDD 的两大块:战略设计和战术设计

DDD 整套体系可以分成两部分,记住这个框架,后面所有概念都能挂在上面:

1. 战略设计(业务视角)——解决"往哪拆"

  • 从业务出发,建立领域模型
  • 划分领域边界,形成限界上下文
  • 限界上下文 ≈ 未来微服务的边界

2. 战术设计(技术视角)——解决"怎么写代码"

  • 把领域模型落成代码:聚合根、实体、值对象、领域服务、仓储等
  • 保证代码结构和业务模型一一对应

# 四、从业务到微服务的三步走

DDD 建模的主要方法是事件风暴(后面会专门写一篇),整体是一个"先发散、再收敛"的过程:

  1. 第一步:事件风暴,梳理业务流程里的用户操作、事件、外部依赖,找出领域实体
  2. 第二步:把业务上紧密相关的实体组合成聚合,确定聚合根——这是第一层边界(逻辑边界,同一个微服务内)
  3. 第三步:把一个或多个聚合装进一个限界上下文——这是第二层边界(物理边界,很可能就是微服务边界)

两层边界划清楚了,微服务怎么拆自然就有答案了。而且以后业务变了要重新拆分,也是按聚合为单位挪动,代价可控。这就是所谓的演进式架构。

# 五、DDD 不是银弹,几点提醒

  • 战术设计门槛不低。对团队的设计能力有要求,不同公司研发水平差异很大,落地前要评估
  • 业务简单就别硬上。DDD 擅长的是高复杂度业务领域,CRUD 系统套 DDD 纯属折腾自己
  • DDD 不仅能指导微服务,也适用于单体应用,还能指导中台业务建模(后面中台篇会展开)

# 六、我的理解

学 DDD 之前,我做设计的习惯是从数据库表开始——先设计表和字段,再写代码。这其实是"数据驱动"。DDD 反过来了:先理解业务、建领域模型,代码和数据库都是模型的映射产物。

这个思路转变才是 DDD 最值钱的部分,术语反而是次要的。

编辑 (opens new window)
#DDD#微服务
上次更新: 2026/10/08, 03:22:29
MySQL 迁移达梦数据库(DM)实践总结
领域、子域与限界上下文

← MySQL 迁移达梦数据库(DM)实践总结 领域、子域与限界上下文→

最近更新
01
奥格登基础英语 850 词
10-08
02
Elasticsearch 入门
10-08
03
Elasticsearch 优化
10-08
更多文章>
Theme by Vdoing | Copyright © 2023-2026 Malize | GitHub | 桂ICP备2024034950号 | 桂公网安备45142202000030
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式