跳到主要内容

建模和设计的整体流程

建模涡流是指两种活动交替完成,最终得到一个合理的类型。

在建模过程中,这种涡流有不少,战略设计和战术设计的交替完善,就是其中一种。

涡流一:在战略设计中,会将模型分解成限界上下文,但是随着建模的深入,更多的实体被发现,有可能我们会发现有必要分割出新的上下文,那对战略设计就行修改,以及对通用语言进行补充和完善。

涡流二:在战略设计内部,我们要先对领域进行划分,然后再寻找限界上下文,理想情况下,子领域和限界上下文是一一对应的,但是有可能在寻找限界上下文的过程中,有可能一个子领域下划分出了两个限界上下文,这就说明之前的领域划分是有问题的,需要进行调整,而调整之后的领域划分也能更好的指导限界上下文的划分,从而形成一个良性的循环。

建模设计过程并不是一个规则的过程,它是一个以形成最优模型为目标的不断优化的过程。

屏幕截图 2024-01-09 223506

image-20240109223440014

用户故事

建模和设计的第一步是从用户故事开始的。

通用语言

  • 在讨论模型和定义模型时,团队使用的是同一种语言。
  • 领域知识需要在团队内部高效流转,模型需要描述。
  • 通用语言要体现在代码里。

其实在对用户故事进行挖掘的时候,就已经是建立通用语言了。在讨论的时候,大部分时间是领域专家在讲解,其他人要做的是理解领域专家提出的各种概念,及时提问,同时固化。

把出现的关键词汇提炼成一个表格。

image-20240111225654123

战略设计

  • DDD 中对问题空间和解决方案空间进行分解的过程。
  • 目的是分解模型以控制复杂性
  • 是DDD与传统建模和设计方法的核心区别之一

image-20240111231308443

  • 领域划分
  • 寻找限界上下文(BC)
  • 确定上下文映射,确定上下文映射的过程还会决定在哪里加入防腐层。

战术设计

  • 对各个 BC 的细节设计过程
  • BC 内部的模型结构与完整技术方案

下面这张图是从《领域驱动设计》一书中截取的,下面这些元素就是战术设计相关的主要结构元素,包括聚合、实体、值对象、工厂、仓储、模块、服务,有这些元素构成的结构确定下来之后,代码基本上就确定下来了。

image-20240111232643807

战术设计是包括编码的

常见建模方法

  • Domain Storytelling (领域故事陈述法)
  • Event Storming (事件风暴法),最主流
  • 4C (四色建模法)

image-20240111233355592