DDD | 入门 - [概念体系]

本文介绍了DDD方法论中领域、子域和界限上下文的概念,强调不要以MVC框架来类比DDD,而是将其视为整理业务逻辑的过程。作者通过实例说明如何从杂乱的业务中提炼领域,划分核心子域、支撑子域和通用子域,以及如何使用通用语言(界限上下文)进行模型设计。
摘要由CSDN通过智能技术生成

接触 DDD 前的准备

不要用和 MVC 对照的思想去接触 DDD

不要用和 MVC 对照的思想去接触 DDD,这样你会很痛苦。
在之前 蛋式编程 这个帖子中阐述过,当我们使用 MVC 时,其实是在进行一个填表游戏,因为可以很自然的拆解出两个维度,业务以及我现在在针对那个层进行开发,如下图:
在这里插入图片描述所以,其实理论上一个 MVC 架构的项目在需求明确的一瞬间,上面的表格就已经确定了,同时,类的数量和他们各自是干什么的也已经确定了。

而在使用 DDD 时,我们可以理解为是收拾杂乱房间的过程
在这里插入图片描述
当我们开始使用 DDD 可开展工作的时候,我们面前尚未建模的部分就像这间屋子。如何收拾这样的屋子,我们需要归置散落的衣物,收拾未归为的小工具,收拾桌面,清理地面……

经过评估,上述工作我们都需要完成,任何一个缺失都不能算是我们已经完成了房间的清理,因此,我们认定刚刚提到的都是不同的领域。他们具有等同的地位,并且都需要分别关注。

然后,我们把目光聚焦到衣物上,那么衣物充斥了我们的视线,这是我们目前需要处理的领域。刚刚说的其他的问题?去他大爷的吧,现在我们只管衣物。然后,我们开始领域内建模,如何收集、折叠、识别、收纳这是后话,跳过。

总结刚刚经历过的过程,如下图所示

  • 我们从杂乱的业务信息中挑出一个
  • 以这个信息为核心聚拢周围的混沌,形成一个独立的小混沌团以完整的描述刚刚那个信息相关的所有
  • 现在这个小团的,就是以前混沌的业务里的一个方面
  • 重复上面的过程,使一开始的那一大团混沌不在有任何残留,完全只剩下若干个小的
    在这里插入图片描述

领域 & 子域 & 界限上下文

思路

我们怎么理解 DDD 中的领域。
先将它理解成业务系统本身,或业务系统一部分业务本身。这里需要注意一个误区,领域是你公司进行整体的业务或其一部分,而不是你正在开发(或者既存)的项目中业务的一部分。

这会导致很多开发人员认为自己目前项目中的一个模块就对应 DDD 中的一个领域。
而事实上并不是,可能你的项目整体上只是你所在部门的一个领域,甚至你所在公司整体业务中划分出来的众多领域中的一个。而你之前认为的模块,其实应该对应 DDD 中的一个界限上下文。

DDD 旨在使用领域模型进行设计,但绝不是希望将业务系统设计为一个整体、所谓内聚、完全功能的模型。而是在模型里架构一个结构清晰的体系,这个体系以领域为核心视角。

一个还处于混沌的领域中可能包括很多事物

  • 我们通常认为,从业务视角出发,如果一个事物与其他的事物都格格不入,那就应该排除在领域之外
  • 我们通常会确认这些事物中的一个作为当前这个领域的核心。如果存在多个我们确认这是业务核心的事物,那通常意味着需要对目前正在讨论的领域进行拆解,至少形成多个界限上下文甚至多个领域
  • 然后我们会发现,有一些事物并不是当前这个领域的核心关注点,但是它依然是领域的一部分。这些事物中的一些和当前领域的核心业务本身有关联,而另一些可以和很多领域产生关联

按刚刚粗略的划分,我还已经规定了领域和子域,其中子域又被细分为了核心子域、支撑子域、通用子域

现在,我们只是贴着领域进行了划分:把领域切割为了子域和子域之间的协作关系。但各个子域中,依然是混沌的,我们需要开发它。而开发一个混沌的东西的前提是我们需要先能准确的描述它,在 DDD 的核心思路里,开发是一个以领域业务专家为核心,专家、需求提出人、研发人员一起协作的集体行为,因此这要求我们可以准确并且统一的描述目前混沌的部分。准确并且统一的描述就是通用语言,通用语言在领域中的作用范围就是界限上下文。

领域

一块业务 A 本身

子域
  • 核心子域:领域中直接决定领域是否成功的那部分,领域业务里的核心焦点,可以认为核心子域就是当前领域想做的事本身
  • 支撑子域:领域中不可或缺,是业务的重要方面,但是又不属于核心的部分。这些子域对应的概念,很有可能是另一个领域中的核心域,但在当前的领域里,它虽然重要但也不是我们的核心关注点,所以只是一个支撑子域
  • 通用子域:在领域中有体现,但他被广泛的应用于整个业务,那它就可以被定义为一个通用子域。一个简单的区分支撑子域和通用子域的方法:只从可行性上进行分析,你的项目敢通过购买的方式得到这个子域吗?如果可行,那就是通用子域
界限上下文
  • 通用语言在领域中的作用范围
  • 通用语言是领域模型的边界
  • 通常和子域是 1 对 1 的

领域的初步划分

刚刚接触 DDD 的新手,通常苦于如何迈出 DDD 实践的第一步,如何划分领域

面提供一种初步划分领域的方式,也是初学者最有可行性的实践方式:

  • 准备完整的可以描述你整个业务的文档,准备若干有颜色的笔(或者一把剪刀和足够大的桌子)
  • 完整的阅读你整个业务文档
  • 再次完整的阅读你整个业务文档,用不同颜色标记几个明显非常核心的信息
  • 围绕这些信息用对应的颜色标注整个文档的其他信息,知道标无可标
  • 检查文档现在不含颜色的部分,尝试从其中得到另一个核心信息,并在文档中的无颜色部分中标注对应颜色
  • 重复上面的步骤,知道整个文档不再含有无颜色的部分
  • 归纳各个颜色下的信息,这些就是初步划分的领域和其下的所有已知信息
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值