DDD领域划分理论知识

领域划分

使用DDD过程中,在面向业务变化时首先要理解业务的核心问题,有针对性进行
关注点分离出找到相对内聚的业务活动形成子问题域。子问题域内部是相对稳定的,
而子问题是很容易变化的,DDD核心在于领域边界的识别和划分

DDD是以领域为核心的,实践DDD时要先根据问题域划分出相关的领域
描述应用需要解决什么问题。领域中存在限界上下文,它用于解决领域内
的特定问题,具备特定的职责,并存在边界。限界上下文中的领域模型具备
较高的内聚性,不同边界之间需要透过显示边界进行通信

在根据需求划分限界上下文时,可以从需求术语中提取一些概念对象,
为它们绑定一定行为。
接着将高耦合的对象划分在一期,寻找它们的内在关系,
尝试形成对应的限界上下文***。最后,整理各个限界上下文的行为,验证
它是否完整、清晰和高内聚

领域模型是对领域内的关键概念及其关系的可视化表示,通过描述多个领域对象
之间的关系,实现业务功能场景在软件系统的映射,设计的关键在于抽象出限界
上下中的领域对象及其关系,并通过领域模型图表示出来

领域对象能够表达出业务意图,它们具备数据和行为,包括实体、值对象和聚合等概念

  1. 实体是一种对象,有唯一的标识识别自身,具备一定的生命周期,并在生命周
    期内根据状态提供不同的行为
  2. 值对象没有唯一的标识,在领域模型中是不可变和可共享的
  3. 聚合由一系列实体和值对象内聚而成,表达了一个完整的领域概念

多个限界上下文需要进行集成,才能完整解决领域内的问题。在集成时需要注意不同界限
上下文中领域概念的映射和翻译,限界上下文主要由一下几种映射方式

  1. 合作关系: 两个上下文紧密合作的关系
  2. 共享内核: 两个上下文依赖部分共享的模型
  3. 防腐层: 一个上下文通过一些适配和转换与另一个上下文交互
  4. 客户方-供应方开发: 上下文之间有组织的上下游依赖
  5. 开放主机服务: 定义一种协议来让其他上下文对本上下文进行访问
  6. 遵奉者: 下游上下文只能盲目依赖上游上下文
  7. 发布语言: 定义开放主机的协议
  8. 大泥球: 混杂在一期的上下文关系,边界不清晰
  9. 另谋他路: 二个完全没有任何联系的上下文

一般会把领域对象的行为和数据放在一起,以达到设计上的高内聚低耦合
并屏蔽领域对象的细节,暴露公开的行为方法。当存在一些不归属于任何
领域对象的领域行为或操作时,就放在领域服务中

领域服务是领域模型的一部分,应尽量避免将过多的领域行为放在领域服务
中,一个合格的领域对象应该是行为和数据都兼并的

posted @ 2022-12-01 13:59  秋水秋色  阅读(534)  评论(0编辑  收藏  举报