DDD是什么

DDD是领域(Domain)驱动(Driven)设计(Design)的简写,是一种战略设计,先绘制业务领域的关系图,同时定义与模型的边界上下文。

实体

实体是一直保持唯一标识的对象,是一个类,一般的事情情况是对应到数据库中的一张表,也就是OOP里的对象,抽象出来的一个对象。唯一标识,也可以理解成主键,通过这个主键可以在系统中找到它,这个主键还可以跨越多个边界的上下文,也就是关系,一对多,多对多,一对一这样的关系,实体的属性可以随时变化,但是标识不能改变。

值对象

值对象没有标识,这是与实体的区别,它只有属性而且也是不可变的,如果需要改变,那么就需要创建一个新实例来替换旧实例。

聚合

聚合定义了一个或多个实体的一致性边界,一个聚合包含一个根实体,可以使用过实体的标识符执行查找,聚合的作用是为了事务的不变性建模,现实中的操作是复杂的,一次动作可能包含了多个实体的变更,也就是为了数据一致性的操作,但是有一个弊端就是在分布式应用中通常是不可行的,

给可以包含单个实体且不包含子实体,聚合的定义由事务边界确定。

领域服务和应用服务

在DDD的设计中,服务是实现某种逻辑且不保存任何状态的对象,这个理解为中间的中转,例如饭店的服务员,服务员来了,点餐,服务员带着订单到后厨交给其他人处理。

领域事件

发生某种情况的时候,使用领域事件来通知给其他的部件,比如在表中插入一条记录不是领域事件,但是订单取消是领域事件

DDD 相比 MVC

MVCDDD
解决应用程序结构的问题解决业务复杂度的问题
适用于比较简单的业务逻辑适用于比较复杂的业务逻辑
自上而下的设计,从用户界面到数据存储,强调分层开发自下而上的设计,从业务建模出发到应用和基础设施,强调的是领域驱动开发
讲系统分为模型、视图、控制器,前后端分离将系统分为领域层、应用层、基础设施层、用户接口层、强调业务逻辑与技术徐虎额的分离
一般设计中MVC中的实体或者模型都是贫血模式(只有属性)实体或者模型中采用充血设计(有属性,有方法)

如何选择

并不是DDD一定比MVC好,而是要根据业务场景也成本来选择,我个人认为,DDD通常来讲,时间成本、人力成本和学习成本都是高于MVC的,前期战术设计阶段就需要人力和时间来对业务进行建模来确定边界,进行设计,而MVC则可以通过用户的交互方式来直接做设计。


DDD是什么
https://oujun.work/2024/06/11/ddd.html
作者
欧俊
发布于
2024年6月11日
许可协议