DDD领域设计的相关概念简述
1 什么是DDD
领域驱动设计,即Domain Driven Design(DDD)。
- DDD是一套完整而系统的设计理论与方法,使得你的设计思路能够更加清晰,设计过程更加规范。
- DDD 善于处理与领域相关的拥有高复杂度业务的产品开发
总之,DDD是专门为解决复杂性而诞生一套完整的理论方法。
DDD落地实现离不开Clean架构、六边形架构、CQRS、Event Source等思想。
2 DDD相关概念
- 领域:用来限定业务边界和范围
- 子域:领域进一步划分就是子域
- 核心域:核心域应该就是公司的主要业务,简单来说就是公司最盈利的业务。
- 通用域:见明知意,就是不管什么业务,都会涉及到比较通用的范畴,例如登录、授权、网关等。随着业务的发展也可能发展成为核心域。
- 支撑域:支撑业务系统正常运行的业务,但是不处于核心地位。优先级较低,当然随着业务的发展也可能发展成为核心域;例如:物流对于淘宝来说一开始就是支撑域,后来发展成为了核心域
- 通用语言:在事件风暴过程中,通过团队交流达成共识的,能够简单、清晰、准确描述业务涵义和规则的语言
- 限界上下文:通用语言和领域对象,提供的上下文环境,保证在领域之内的一些术语、业务相关对象等(通用语言)只有唯一一个确切的含义。领域边界就是通过限界上下文来定义的,是划分微服务的重要依据。
- 聚合:由业务和逻辑紧密关联的实体和值对象组合而成的。聚合是数据修改和持久化的基本单元,每一个聚合对应一个仓储,实现数据的持久化特点:高内聚、低耦合,它是领域模型中最底层的边界,可以作为拆分微服务的最小单位。
- 聚合根:如果把聚合比作组织,聚合根则是组织的负责人,聚合根也叫做根实体,它不仅仅是实体,还是聚合的管理者。
- 实体:有 ID 标识,通过 ID 判断相等性,ID 在聚合内唯一即可。
- 值对象:无 ID,不可变,无生命周期,用完即扔。
- 领域事件:领域事件是领域模型中非常重要的一部分,用来表示领域中发生的事件。一个领域事件将导致进一步的业务操作,在实现业务解耦的同时,还有助于形成完整的业务闭环,可以通过event,mq等实现,达到最终一致性,和解耦目的。
跨多个实体的业务逻辑通过领域服务来实现;
跨多个聚合的业务逻辑通过应用服务来实现;