“极客时间”《DDD 实战》课程笔记 (一)DDD 与微服务
这是一系列学习笔记,对象是 极客时间 上面的收费课程 《 DDD实战 》。如果你也想要学习一下这门课程,但是不想购买,而且也嫌学习过程漫长(毕竟有20多节课,每节课还挺长),那么可以浏览一下这一系列笔记。
这一系列博客将是对课程的要点总结,不代表我理解和同意作者(欧创新)的观点
学习之前建议先下读一下之前的博文:领域驱动设计DDD入门系列,这一系列笔记我是比较理解和赞同的
为什么要学习DDD?
又是这个问题!简单的回答是:因为我们需要高效的设计,而只有DDD能提供我们高效设计。
极客课程这里给的原因是:微服务和中台战略的必由之路。“中台本质是业务模型,微服务是业务模型的系统落地,DDD 是一种设计思想,它可以同时指导中台业务建模和微服务设计,它们之间就是这样的一个铁三角关系。DDD 强调领域模型和微服务设计的一体性,先有领域模型然后才有微服务,而不是脱离领域模型来谈微服务设计。”
DDD 基础
DDD 的核心知识体系包括:领域、子域、核心域、通用域、支撑域、限界上下文、实体、值对象、聚合和聚合根等概念。

DDD 进阶
主要有领域事件、DDD 分层架构、几种常见的微服务架构模型以及中台设计思想等内容。 包括如何通过领域事件实现微服务解耦;怎样进行微服务分层设计;如何实现层与层之间的服务协作;如何实现前中后台的协同和融合;如何利用 DDD 进行中台设计。
DDD 战略战术
战略设计主要从业务视角出发,建立业务领域模型,划分领域边界,建立通用语言的限界上下文,限界上下文可以作为微服务设计的参考边界。
战术设计则从技术视角出发,侧重于领域模型的技术实现,完成软件开发和落地,包括:聚合根、实体、值对象、领域服务、应用服务和资源库等代码逻辑的设计和实现。
方法论
DDD 看似复杂,可学习起来并不困难,多动手参与几次 DDD 事件风暴工作坊,你就能很快理解 DDD 的核心设计思想和设计过程。
DDD 与微服务
服务拆分困境产生的根本原因就是不知道业务或者微服务的边界到底在什么地方。换句话说,确定了业务边界和应用边界,这个困境也就迎刃而解了。
熟悉 DDD 设计方法的软件工程师在进行微服务设计时,发现可以利用 DDD 设计方法来建立领域模型,划分领域边界,再根据这些领域边界从业务视角来划分微服务边界。而按照 DDD 方法设计出的微服务的业务和应用边界都非常合理,可以很好地实现微服务内部和外部的“高内聚、低耦合”。于是越来越多的人开始把 DDD 作为微服务设计的指导思想。
划定领域模型和微服务边界
第一步:在事件风暴中梳理业务过程中的用户操作、事件以及外部依赖关系等,根据这些要素梳理出领域实体等领域对象。
第二步:根据领域实体之间的业务关联性,将业务紧密相关的实体进行组合形成聚合,同时确定聚合中的聚合根、值对象和实体。聚合之间的边界是第一层边界,它们在同一个微服务实例中运行。
第三步:根据业务及语义边界等因素,将一个或者多个聚合划定在一个限界上下文内,形成领域模型。限界上下文之间的边界是第二层边界,这一层边界可能就是未来微服务的边界,不同限界上下文内的领域逻辑被隔离在不同的微服务实例中运行,物理上相互隔离。
