前言

Github:https://github.com/HealerJean

博客:http://blog.healerjean.com

前言

从架构映射阶段进入领域建模阶段,简单说来,就是跨过战略视角的限界上下文边界进入它的内部,从菱形对称架构的内外分层进入每一层尤其是领域层的内部进行战术设计。在思考如何进行领域建模时,首先需要思考的问题就是:什么是模型?

一、软件系统中的模型

模型的重要性并不体现在它的表现形式,而在于它传递的知识。它是从需求到编码实现的知识翻译器,通过对杂乱无章的问题进行梳理,消除无关逻辑乃至次要逻辑的噪声,然后按照知识语义进行分类与归纳,遵循设计标准与规范建立一个清晰表达业务需求的结构。这个梳理、分类和归纳的过程就是建模的过程,建立的结构即模型

二、 模型驱动设计

建模过程与软件开发生命周期的各种不同的活动息息相关,它们之间的关系大体如图13-2所示。”

1、软件开发生命周期的各种活动

建模活动用灰色的椭圆表示,它涵盖了需求分析、软件架构、详细设计、编码与调试等活动,有时候,测试、集成和保障维护活动也会在一定程度上影响系统的建模。

为了便于更好地理解建模过程,将整个建模过程中主要开展的活动称为“建模活动”,并统一归纳为分析活动、设计活动和实现活动。每一次建模活动都是一次对知识的提炼和转换,产出的成果就是各个建模活动的模型。”

image-20240906161918813

建模活动 说哦名
分析活动 观察真实世界的业务需求,依据设计者的建模观点对业务知识进行提炼与转换,形成表达了业务规则、业务流程或业务关系的逻辑概念,建立分析模型。
设计活动 运用软件设计方法进一步提炼与转换分析模型中的逻辑概念,建立设计模型,使得模型在满足需求功能的同时满足更高的设计质量。
实现活动 通过编码对设计模型中的概念进行提炼与转换,建立实现模型,构建可以运行的高质量软件,同时满足未来的需求变更与产品维护

2、建模过程

完整的建模过程,就是模型驱动设计

image-20240906164216125

数据模型:将问题空间抽取出来的概念视为数据信息,在求解过程中关注数据实体的样式和它们之间的关系,由此建立的模型就是数据模型;

服务模型:将每个问题视为目标系统为客户端提供的服务,在求解过程就会关注客户端发起的请求以及服务返回的响应,由此建立的模型就是服务模型;

领域模型:围绕着问题空间的业务需求,在求解过程中力求提炼出表达领域知识的逻辑概念,由此建立的模型就是领域模型。

毫无疑问,领域驱动设计选择的建模过程,实则是领域模型驱动设计

1)问题空间到解空间的领域建模

针对真实世界的问题空间建立抽象的模型,会组成一个由抽象领域概念组成的理念世界。理念世界是真实世界问题空间向解空间的一个投影,投影的方法就是对问题空间求解的方法。在领域驱动设计中,这个求解方法就是领域建模

当系统规模达到一定程度后,软件复杂度陡然增加,要想直接将问题空间映射为解空间的领域模型,需要极高的驾驭能力。建立的领域模型也仅仅体现了对真实世界的一个水平切面,在面对业务变化时,其稳定性与响应能力都面临着极大的考验。”

image-20240906164624482

2)对限界上下文进行领域建模

对限界上下文进行领域建模,就相当于对一个小规模的软件系统进行领域建模

image-20240906164857773

三、领域模型驱动设计

1、领域模型

image-20240906165205734

概念 说明
领域分析模型 分析真实世界后提炼出的概念模型,就是领域分析模型(分析建模活动)
领域设计模型 设计对领域模型的反映,就是领域设计模型(设计建模活动)
领域分析模型 代码对领域模型的表达,就是领域实现模型(实现建模活动)

2、领域模型与统一语言

统一语言为领域模型驱动设计提供了一致的领域概念,使得领域模型在整个领域建模阶段保持了同步。至于统一语言的获得,自然来自全局分析阶段获得的业务需求,如此就将全局分析与领域建模衔接在一起

image-20240906170450818

3、迭代建模

分析、设计和实现并非3个割裂的阶段,而是领域模型驱动设计的 3 个建模活动。在领域驱动设计统一过程中,我将领域模型驱动设计的过程定义为领域建模阶段,主要执行3个过程工作流:

image-20240906170950069

ContactAuthor