领域驱动设计(Domain Driven Design,DDD)是由 Eric Evans 最早提出的综合软件系统分析和设计的向
对象建模法,如今已经发展成为种针对型复杂系统的领域建模与分析法。它完全改变传统软件
开发程师针对数据库进的建模法,从将要解决的业务概念和业务规则转换为软件系统中的类型以及
类型的属性与为,通过合运向对象的封装、继承和多态等设计要素,降低或隐藏整个系统的业务复
杂性,并使得系统具有好的扩展性,应对纷繁多变的现实业务问题。
领域驱动设计是种法论(Methodology),根据维基百科的定义,法论是套运到某个研究领域的
系统与论分析法。领域驱动设计就是针对软件开发领域提出的套系统与论分析法。Eric Evans 在
创造性地提出领域驱动设计时,实则是针对当时项中聚焦在以数据以及数据样式为核的系统建模法的
批判。向数据的建模法是关系数据库论的延续,关注的是数据表以及数据表之间关系的设计。这是典
型的向技术实现的建模法,对渐复杂的业务逻辑,这种设计法缺灵活性与可扩展性,也法
好地向对象设计思想及设计模式,建可重的、可扩展的代码单元。领域驱动设计的提出,是设计
观念的转变,蕴含全新的设计思想、设计原则与设计过程。
由于领域驱动设计是套法论,它建以领域为核驱动的设计体系,因具有定的开放性。在这
个体系中,你可以使限于领域驱动设计提出的任何种法来解决这些问题。如,可以使
(Use Case)、测试驱动开发(TDD)、户故事(User Story)来帮助我们对领域建模型;可以引整
洁架构思想及六边形架构,以帮助我们建个层次分明、结构清晰的系统架构;还可以引函数式编程思
想,纯函数与抽象代数结构的变性以及函数的组合性来表达领域模型。这些实践法与模型已经超越
Eric Evans 最初提出的领域驱动设计范畴,但在体系上却是脉相承的。这也是为么在领域驱动设计社
区,能够断诞新的概念诸如 CQRS 模式、事件溯源(Event Sourcing)模式与事件(Event
Storming);领域驱动设计也以开放的态拥抱微服务(Micro Service),甚能够将它的设计思想与原则
运到微服务架构设计中。
领域驱动设计当然是架构法,也并设计模式。准确地说,它其实是“种思维式,也是组优先任
务,它旨在加速那些必须处复杂领域的软件项的开发”。领域驱动设计贯穿整个软件开发的命周期,
包括对需求的分析、建模、架构、设计,甚最终的编码实现,乃对编码的测试与重构。
领域驱动设计强调领域模型的重要性,并通过模型驱动设计来保障领域模型与程序设计的致。从业务需求
中提炼出统语(Ubiquitous Language),再基于统语建领域模型;这个领域模型会指导着程序设
计以及编码实现;最后,通过重构来发现隐式概念,并运设计模式改进设计与开发质。这个过程如下
图所示:
第01课:领域驱动设计概览
领域驱动设计的开放性
领域驱动设计过程