DDD(领域驱动设计)学习概念笔记

4 阅读4分钟

以下内容均来自于圣杰的博客,链接表明对应文案的出处,这里做一下学习笔记。

DDD理论学习系列(1)-- 通用语言:

cloud.tencent.com/developer/i…

通用语言:通过团队交流达成共识的能够简单清晰准确传递业务规则的语言(可以是文字、图片等)。

DDD理论学习系列(2)-- 领域

cloud.tencent.com/developer/i…

一个领域本质上可以理解为就是一个问题域,只要是同一个领域,那问题域就相同。所以,只要我们确定了系统所属的领域,那这个系统的核心业务,即要解决的关键问题、问题的范围边界就基本确定了。

子域:将一个领域拆分成多个子域,再针对每个子域进行分析。而子域又可以分为核心域、通用子域、支撑子域。

核心域:作为一个业务的核心存在,它最能体现系统的核心价值,也是核心竞争力。如果要最大化系统的价值,我们必然要在核心域的设计上更胜一筹。

通用子域:顾名思义,也就是服务于整个业务领域。比如我们要为该网站提供一个日志系统,用来记录一些日志。我们可以设计一个日志子域来供其他子域使用。

支撑子域:用于业务系统的某些重要业务而非核心业务,它关注于业务的某一方面,来支撑完善业务系统。

总结:

  • 领域是有范围界限的,也可以说是有边界的。

  • 核心域是业务系统的核心价值所在,承载着一个系统的重中之重。

  • 通用子域可以理解为业务系统所有子域的消费者,提供着通用服务。

  • 支撑子域专注于业务系统的某一重要的业务,来支撑和完善业务系统。

DDD理论学习系列(3)-- 限界上下文

cloud.tencent.com/developer/i…

限界上下文:主要用来封装通用语言和领域对象,用来为领域提供上下文语境,保证在领域之内的一些术语、业务相关对象等(通用语言)有一个确切的含义,没有二义性。

DDD理论学习系列(4)-- 领域模型

cloud.tencent.com/developer/i…

领域模型:是对我们软件系统中要解决问题的抽象表达。

领域反应的是我们业务上需要解决的问题,模型是我们针对该问题提出的解决方案。

综合来说,领域模型就是用来描述我们正在解决的问题和提出的解决方案。

领域模型,就是将业务中涉及到的概念以面向对象的思想进行抽象,抽象出实体对象,确定实体所对应的方法和属性,以及实体之间的关系,然后将这些实体和实体之间的关系以某种形式(比如UML、图形、代码、文字描述等)展现出来。

DDD理论学习系列(5)-- 统一建模语言

cloud.tencent.com/developer/i…

UML(统一建模语言):一种用于绘制软件概念图的图形符号。在和他人交流以及帮助解决设计问题方法,图示是最有效的。

UML的三个级别:

  • 概念级别:用来描述问题领域中概念和抽象的一种速记方法,没有比较严格的语义规则。和源代码之间没有很强的关联性。
  • 规格说明级别:描绘问题的解决方案,目的是为了能够转换成源代码。要遵循严格的语义规则。
  • 实现级别:用来描绘已有的源代码,如类图。要遵循严格的语义规则。

UML的三种图示类别:

  • 静态图(static diagram):描述了类、对象、数据结构以及它们之间的关系,展现出软件元素间不变的逻辑结构。类图、对象图都是静态图。
  • 动态图(dynamci diagram):展示软件实体在运行过程中是如何转换的,其中描述了运行流程或实体改变状态的方式。顺序图、协作图、状态图都是状态图。
  • 物理图(physical diagram):展示软件实体不变的物理结构,描述了诸如源文件、库、二进制文件、数据文件等物理实体以及它们之间的关系。

1. 类图:主要展示程序中主要的类和关系。

2. 对象图:展示的是系统执行的某个特定时刻的一组对象和关系,可以看作内存快照。

3. 顺序图:动态模型,为了清楚表达出消息的顺序。

4. 协作图:为了表达出对象之间的关系。

5. 状态图:为了理解系统的行为和状态的转换。

DDD理论学习系列(6)-- 实体

cloud.tencent.com/developer/i…

DDD中的实体:要求实体是唯一的且可持续变化的。意思是说在实体的生命周期内,无论其如何变化,其仍旧是同一个实体。唯一性由唯一的身份标识来决定的。可变性也正反映了实体本身的状态和行为。

后续笔记待补充。