Open supergem3000 opened 8 months ago
DDD包括战略设计和战术设计两个部分。 战略设计主要从业务角度出发,建立业务领域模型,划分领域边界,建立通用语言的限界上下文,限界上下文可以作为微服务设计的参考边界。 战术设计则从技术角度出发,侧重于领域模型的技术实现,完成软件开发和落地,包括:聚合根、实体、值对象、领域服务、应用服务和资源库等代码逻辑的设计和实现。
阅读材料:DDD领域驱动设计落地实践系列:战略设计和战术设计_Java_慕枫技术笔记_InfoQ写作社区
领域,就是字面意思,“领域是从事一种专门活动或事业的范围、部类或部门”。范围即边界。 领域可以进一步划分为子领域。每个子域对应一个更小的问题域或更小的业务范围。
子域可以根据自身重要程度划分为三类子域:核心域、通用域、支撑域。 决定产品竞争力的是核心域;没有太多个性化需求、被多个子域使用的通用功能子域是通用域(举例:认证、授权);必需的但不包含竞争力的功能、也不包含通用功能的是支撑域(举例:数据代码类、数据字典)。 核心域、支撑域和通用域的主要目标是:通过领域划分,区分不同子域在公司内的不同功能属性和重要性,从而公司可对不同子域采取不同的资源投入和建设策略,其关注度也会不一样。
通用语言:团队共识的交流语言 限界上下文:通用语言、领域对象的上下文环境,保证领域内的术语没有二义性。
举例:“能穿多少穿多少”是穿多还是穿少?如果提供了环境寒冬或夏日,这句话的含义就明确了。
实体,就是通常理解的含义
领域内实体和值对象好比个体,能让实体和值对象协同工作的组织就是聚合,确保领域对象在实现共同的业务逻辑时,实现数据的持久化。 聚合由逻辑紧密关联的实体和值对象组合而成,是数据修改和持久化的基本单元。 聚合有一个聚合根和上下文边界。 聚合根避免数据模型缺少统一业务规则控制,导致聚合、实体之间数据不一致。 聚合根是聚合的负责人,也成为根实体。负责协调实体和值对象按个规则协调完成逻辑。 聚合之间聚合根是对外接口人。聚合之间通过聚合根ID关联引用,要访问其他聚合的实体,要通过聚合根导航到聚合内部实体。
领域驱动设计
DDD包括战略设计和战术设计两个部分。 战略设计主要从业务角度出发,建立业务领域模型,划分领域边界,建立通用语言的限界上下文,限界上下文可以作为微服务设计的参考边界。 战术设计则从技术角度出发,侧重于领域模型的技术实现,完成软件开发和落地,包括:聚合根、实体、值对象、领域服务、应用服务和资源库等代码逻辑的设计和实现。
领域、子域
领域,就是字面意思,“领域是从事一种专门活动或事业的范围、部类或部门”。范围即边界。 领域可以进一步划分为子领域。每个子域对应一个更小的问题域或更小的业务范围。
核心域、通用域、支撑域
子域可以根据自身重要程度划分为三类子域:核心域、通用域、支撑域。 决定产品竞争力的是核心域;没有太多个性化需求、被多个子域使用的通用功能子域是通用域(举例:认证、授权);必需的但不包含竞争力的功能、也不包含通用功能的是支撑域(举例:数据代码类、数据字典)。 核心域、支撑域和通用域的主要目标是:通过领域划分,区分不同子域在公司内的不同功能属性和重要性,从而公司可对不同子域采取不同的资源投入和建设策略,其关注度也会不一样。
通用语言、限界上下文
通用语言:团队共识的交流语言 限界上下文:通用语言、领域对象的上下文环境,保证领域内的术语没有二义性。
实体和值对象
实体,就是通常理解的含义
聚合和聚合根
领域内实体和值对象好比个体,能让实体和值对象协同工作的组织就是聚合,确保领域对象在实现共同的业务逻辑时,实现数据的持久化。 聚合由逻辑紧密关联的实体和值对象组合而成,是数据修改和持久化的基本单元。 聚合有一个聚合根和上下文边界。 聚合根避免数据模型缺少统一业务规则控制,导致聚合、实体之间数据不一致。 聚合根是聚合的负责人,也成为根实体。负责协调实体和值对象按个规则协调完成逻辑。 聚合之间聚合根是对外接口人。聚合之间通过聚合根ID关联引用,要访问其他聚合的实体,要通过聚合根导航到聚合内部实体。