这段时间公众号没有更新,其中一个原因就是在准备一套 DDD 视频,作为多年的技术总结。

其次就是之前胆囊手术后感觉不太舒服,所以大家也要注意身体健康,这个很重要。

在一些网友的建议下,希望我出一套系统性的教程。

所以经过一段时间准备,我在国庆期间肝了一套 DDD 视频《通俗的 DDD 系列视频》,包含了 DDD 领域驱动设计的核心概念和实践方法。视频中我详细讲解了 DDD 的分层架构、领域模型、聚合根、值对象、事件驱动架构等核心概念,同时也分享了一些实际项目中的 DDD 实践经验。

我把这些内容都放到 B 站和视频号中了。

如果有什么问题可以在评论区留言,我会在后续的视频中回答。

目录

已经完成:

  • 01 说人话,什么是 DDD, DDD 是一门技术吗?
  • 02 事务脚本VS模型驱动,以及充血贫血之争
  • 03 聚合,以及如何对大聚合进行拆分
  • 04 动手写代码:DDD 的分层架构
  • 05 值对象,其实就是“字段包”
  • 06 限界上下文:逻辑边界
  • 07 DDD 八股文
  • 08 DDD 的建模过程
  • 09 DDD在敏捷团队中如何应用
  • 10 DDD 概念全景回顾【阶段性完结】
  • 每个人都觉得自己对 DDD 的理解更正确
  • 为什么我要求团队不使用多对多关系?
  • 讲讲什么是依赖、依赖倒置和接口
  • 场景和复用分离:彻底解决代码复用的困惑

正在制作:

  • ArchUnit 为 DDD 架构自动化检查
  • DDD 项目单元测试和API测试
  • 对象转换专题

内容摘要总结(AI 整理)

核心理念与代码风格

  • DDD的本质:核心是设计出能准确反映业务的领域模型,并以此为基础构建软件,从而提升代码的可读性、可维护性,并保证业务逻辑的一致性。
  • 模型驱动 vs 事务脚本:DDD 推崇模型驱动设计,与传统的“事务脚本”(面向过程的写法)和“Smart UI”形成对比。它要求我们回归面向对象的初心,将数据和操作数据的行为封装在一起。
  • 充血模型是首选:DDD 倡导充血模型,即对象不仅有数据,还包含处理自身状态和业务规则的逻辑。同时要警惕“涨血”,避免将不属于对象自身职责的行为强加给它。

战术设计核心模式

  • 聚合:将一组关联的业务对象组合成一个一致性边界,并指定一个聚合根作为唯一入口。它是程序设计的“骨架”,能保证业务规则的完整性、降低对象间的耦合。
  • 值对象:没有唯一标识、通过属性值判断相等、且不可变的对象。可以理解为“字段包”,用于封装一组描述性属性,如“地址”、“金额”等,能有效减少重复定义。
  • 分层架构:DDD 常用的架构有四层架构、六边形架构等,核心是分离关注点。实践中建议 ApplicationService 处理具体用例场景,DomainService 处理可复用的核心领域逻辑。

战略设计与建模过程

  • 限界上下文:一个明确的逻辑边界,确保领域模型在这个边界内有单一、无歧义的含义。在单体中用于划分模块,在微服务架构中通常对应一个微服务。
  • 建模方法:核心是通过不同线索寻找领域对象。常用方法包括用例分析法、四色建模、事件风暴等。
  • 高层概念:包括战略设计与战术设计的区分、建立团队通用的语言、强调协作共创等,这些是技术走向管理需要理解的视角。

重要实践原则

  • 警惕多对多关系:多对多关系在现实中往往不存在,它通常隐藏了某个重要的中间模型,会导致业务边界不清,应尽量避免。
  • 场景与复用分离:真正的代码复用源于上下文无关的逻辑。应将特定场景的编排代码与可复用的核心领域逻辑分离开。
  • 接口的意义:接口是“契约”,应该用在真正需要扩展点的地方(如策略模式),而不是为每个 Service 都创建接口。

B站观看

https://space.bilibili.com/2066241928/lists/6451832?type=season

视频号观看

01 说人话,什么是 DDD, DDD 是一门技术吗?

https://weixin.qq.com/sph/Aj8hRQvDb

02 事务脚本VS模型驱动,以及充血贫血之争

https://weixin.qq.com/sph/AqNtqkflt

03 聚合,以及如何对大聚合进行拆分

https://weixin.qq.com/sph/AoBgDZ3JA

04 动手写代码:DDD 的分层架构

https://weixin.qq.com/sph/AVVGCBCr1

05 值对象,其实就是“字段包” - 理解值对象

https://weixin.qq.com/sph/Am6qzEzKa

06 限界上下文:逻辑边界 - 为什么需要限界上下文?

https://weixin.qq.com/sph/AEpbQGW31

07 DDD 八股文 - 程序员可能不太喜欢但管理者非常关心的概念

https://weixin.qq.com/sph/AASWAMqCT

08 DDD 的建模过程 - 系统词汇法(OOA)

https://weixin.qq.com/sph/AQWPGjto5

09 DDD在敏捷团队中如何应用

https://weixin.qq.com/sph/AVhjDjYb2

10 DDD 概念全景回顾【阶段性完结】

https://weixin.qq.com/sph/AgktPDKBB

为什么每个人都觉得自己对 DDD 的理解更正确? 【番外篇】

https://weixin.qq.com/sph/AQXYznrma

讲讲什么是依赖、依赖倒置和接口【番外篇】

https://weixin.qq.com/sph/Aah8bO2Lq

为什么我要求团队不使用多对多关系?【番外篇】

https://weixin.qq.com/sph/AejBkXZY0

场景和复用分离:彻底解决代码复用的困惑【番外篇】

https://weixin.qq.com/sph/Am9pWhpGj

Last Updated:
Contributors: shaogefenhao