Skip to content

概念和术语

决定产品和公司核心竞争力的子域是核心域,它是业务成功的主要因素和公司的核心竞争力。

没有太多个性化的诉求,同时被多个子域使用的通用功能子域是通用域。

还有一种功能子域是必需的,但既不包含决定产品和公司核心竞争力的功能,也不包含通用功能的子域,它就是支撑域。

通用域则是你需要用到的通用系统,比如认证、权限等等,这类应用很容易买到,没有企业特点限制,不需要做太多的定制化。而支撑域则具有企业特性,但不具有通用性,例如数据代码类的数据字典等系统。

实体

在 DDD 中有这样一类对象,它们拥有唯一标识符,且标识符在历经各种状态变更后仍能保持一致。对这些对象而言,重要的不是其属性,而是其延续性和标识,对象的延续性和标识会跨越甚至超出软件的生命周期。我们把这样的对象称为实体。

在 DDD 不同的设计过程中,实体的形态是不同的

  • 领域模型中的实体是多个属性、操作或行为的载体
  • 事件风暴,聚类多个业务实体对象和值对象形成聚合

实体的值对象是组成领域模型的基础单元;

在代码模型中,实体的表现形式是实体类,Entity,通常采用充血模型;

实体的运行形态,领域对象 DO

实体的数据库形态

与传统数据模型设计优先不同,DDD 是先构建领域模型,针对实际业务场景构建实体对象和行为,再将实体对象映射到数据持久化对象。

在领域模型映射到数据模型时,一个实体可能对应 0 个、1 个或者多个数据库持久化对象。大多数情况下实体与持久化对象是一对一。

值对象

通过对象属性值来识别的对象,它将多个相关属性组合为一个概念整体。

聚合

在 DDD 中,实体和值对象是很基础的领域对象。实体一般对应业务对象,它具有业务属性和业务行为;而值对象主要是属性集合,对实体的状态和特征进行描述。但实体和值对象都只是个体化的对象,它们的行为表现出来的是个体的能力。

DDD 分层架构

  • 用户接口层
    • 用户界面
    • Web 服务
    • 其它
  • 应用层
    • 聚合
      • 实体
      • 值对象
    • 领域服务
  • 领域层
  • 基础层