1、怎样理解DDD
是什么?
DDD是领域驱动设计,是对于微服务拆分的一种方法论,按照业务领域对服务进行拆分,保证业务内高内聚,业务之间低耦合
为什么?
- 降低大型系统的复杂度,程序持久迭代
- 服务内高内聚、服务之间低耦合,提高复用率
怎么做?
- 头脑风暴,找出业务域、实体、实践
- 绘制出领域模型图
- 代码落地
2、相关概念
- 领域(Domain)
领域(Domain)是业务相关知识的集合。 通俗来说,领域就是业务知识。业务有一些内在规则,存在专业性,比如财务、CRM、OA、电商等不同领域的业务规则不同。计算机只是业务规则的自动化。
- 子域(Sub Domain)
一个子域是领域的一部分。 为了降低业务理解复杂度,DDD 实践中通常将领域划分为子域,通过分而治之的方法分析问题。
- 核心域(Core Domain)
核心域是指领域中最核心的部分,通常对应企业的核心业务 核心域需要我们投入最大精力,进行充分的分析。因为它是一个企业能运转的基础。
- 支撑域(Support Domain)
支撑域是一种特殊的子域,是指为了实现核心业务而不得不开发的业务所对应的相关知识的集合。 例如,活动平台业务属于电商的支撑域,因为该业务对于电商企业并不是必需的,其存在的意义仅在于放大利润。
- 通用域(General Domain)
通用域是另一种特殊的子域,对应的是业界已经有成熟方案的业务。 通用域可以看做一种特殊的支撑域,可以使用标准部件来实现,短信通知、邮件等领域问题。
- 限界上下文( Bounded context)
限界上下文是有明确边界的上下文。在 DDD 实践中领域模型会被限定在限界上下文当中。
- 实体(Entity)
实体(Entity)是在相同限界上下文中具有唯一标识的领域模型,可变,通过标识判断同一性。
- 值对象(Value Object)
值对象 (Value Ojbect)是一种特殊的领域模型,不可变,通过值判断同一性。
- 聚合根( Aggregate Root)
聚合根( Aggregate Root)是聚合中最核心的实体,其他的实体和值对象都从属于这个实体。
- 接入层(Interface)
接入层负责的是系统的输入和输出。
- 应用层(Application)
应用层,组织业务场景,编排业务,隔离场景对领域层的差异
- 领域层(Domain)
领域层,实现具体的业务逻辑、规则,为应用层提供无差别的服务能力。
- 基础设施层(Infrastructure)
基础设施层,提供具体的技术实现,比如存储,基础设施对业务保持透明。
- 事件风暴(Event Storming)
事件风暴是一种以工作坊的形式,使用 DDD 建模的方式。
事件风暴是一种捕获行为需求的方法,类似传统软件的开发用例分析。所有人员(领域专家和技术专家) 对业务行为进行一次发散,并最终收敛达到业务的统一。