如何理解 DDD ?

领域驱动设计(DDD,Domain-Driven Design),总体结构分为四层: Infrastructure(基础实施层),Domain(领域层),Application(应用层),Interfaces(表示层,也叫用户界面层或是接口层)。

DDD面向领域思考问题,在DDD设计中,最重要的是如何去划分领域和边界,它是一套完整而系统的设计方法,能带给你从战略设计到战术设计的规范过程,使得你的设计思路更加清晰,设计过程更加规范。
image.png

问题

如果对自己要开发的业务领域没有清晰的定义和边界,没有设计系统的领域模型,而仅仅跟着所谓的需求不断开发功能,一旦需求来自多个方面,就可能发生需求冲突,或者随着时间的推移,前后功能也会发生冲突,这时你越是试图弥补这些冲突,就越是陷入更大的冲突之中。
用户或者产品经理的需求零零散散,不断变更。工程师在各处代码中寻找可以实现这些需求变更的代码,修修补补。软件只有需求分析,并没有真正的设计,系统没有一个统一的领域模型维持其内在的逻辑一致性。功能特性并不是按照领域模型内在的逻辑设计,而是按照各色人等自己的主观想象设计。项目时间一长,各种困难重重,需求不断延期,线上bug不断,管理者考虑是不是要推到重来,而程序员则考虑是不是要跑路。

领域模型

为解决场景下的问题而形成的一套模型,然后使用这套模型来解决业务问题。 根据重复劳动经验我们会形成一套模式。领域模型也一样会形成一套模式,他包括:实体、值对象、聚合、领域服务、应用服务、领域能力。
用来定义领域元素,和管理领域元素的上下文的,领域元素之间的上下文指:元素间包含关系和逻辑关系。

实体

值对象

聚合

领域服务

应用服务

领域能力