02.领域驱动设计:了解领域、子域、核心域、通用域、支撑域、通用语言和限界上下文

news2024/9/29 7:15:37

目录

概要

1、领域

2、子领域

建立领域模型步骤:

3、核心域

4、通用域

5、支撑域

6、思考题

7、通用语言

8、限界上下文

限界上下文和微服务的关系

9、总结

限界上下文在微服务设计中的作用和意义是什么


概要

领域驱动设计(DDD)的知识体系提出了很多的名词,比如:领域、子域、核心域、通用域、支

撑域、限界上下文、聚合、聚合根、实体、值对象等等。这些名词,都是关键概念,这些名词在你

的微服务设计和开发过程中不一定都用得上,但它可以帮你理解DDD的核心设计思想和理念。而

这些思想和理念,在IT战略设计、业务建模和微服务设计中都是可以借鉴的。

1、领域

领域就是用来确定范围的,范围即边界,这是DDD在设计中不断强调边界的原因。

在研究和解决业务问题时,DDD会按照一定的规则将业务领域进行细分,当领域细分到一定的程

度后,DDD会将问题范围限定在特定的边界内,在这个边界内建立领域模型,进而用代码实现该

领域模型,解决相应的业务问题。

简言之,DDD的领域就是这个边界内要解决的业务问题域。

2、子领域

领域可以进一步划分为子领域。我们把划分出来的多个子领域称为子域,每个子域对应一个更小的

问题域或更小的业务范围。

DDD是一种处理高度复杂领域的设计思想,它试图分离技术实现的复杂度。

面对错综复杂的业务领域,DDD是如何使业务从复杂变得简单,更容易让人理解,技术实现更容

呢?

DDD的研究方法与自然科学的研究方法类似。当人们在自然科学研究中遇到复杂问题时,通常的

做法就是将问题一步一步地细分,再针对细分出来的问题域,逐个深入研究,探索和建立所有子域

的知识体系。当所有问题子域完成研究时,我们就建立了全部领域的完整知识体系了。

建立领域模型步骤:
  • 第一步:确定研究对象,即研究领域。

  • 第二步:对研究对象进行细分。

  • 第三步:将子域进一步细分为多个子域的过程。

  • 第四步:确定了研究的最小边界。

    确定微服务内功能要素和边界的过程。

每一个细分的领域都会有一个知识体系,就是DDD的领域模型。

在所有子域的研究完成后,我们就建立了全域的知识体系了,也就建立了全域的领域模型。

领域建模和微服务建设的过程和方法基本类似,其核心思想就是将问题域逐步分解,降低业务理解

和系统实现的复杂度。

3、核心域

在领域不断划分的过程中,领域会细分为不同的子域,子域可以根据自身重要性和功能属性划分为

三类子域,它们分别是:核心域、通用域和支撑域。

决定产品和公司核心竞争力的子域是核心域,它是业务成功的主要因素和公司的核心竞争力。

4、通用域

没有太多个性化的诉求,同时被多个子域使用的通用功能子域是通用域

5、支撑域

还有一种功能子域是必需的,但既不包含决定产品和公司核心竞争力的功能,也不包含通用功能的

子域,它就是支撑域。

这三类子域相较之下,核心域是最重要的

通用域和支撑域如果对应到企业系统,举例来说的话,通用域则是你需要用到的通用系统,比如

证、权限等等,这类应用很容易买到,没有企业特点限制,不需要做太多的定制化。而支撑域则具

企业特性,但不具有通用性

例如数据代码类的数据字典等系统。

很多公司的业务,表面看上去相似,但商业模式和战略方向是存在很大差异的,因此公司的关注点

会不一样,在划分核心域、通用域和支撑域时,其结果也会出现非常大的差异。

如果你的公司刚好有意向转型微服务架构的话,我建议你和你的技术团队要将核心域的建设排在首

位,最好是有绝对的掌控能力和自主研发能力,如果资源实在有限的话,可以在支撑域或者通用域

上想想办法,暂时采用外购的方式也未尝不可。

6、思考题

请结合你所在公司的业务情况,尝试给业务做一个领域拆分,看看哪些子域是核心域,哪些子域是

通用域和支撑域?

7、通用语言

在事件风暴过程中,通过团队交流达成共识的,能够简单、清晰、准确描述业务涵义和规则的语言

就是通用语言。

也就是说,通用语言是团队统一的语言,不管你在团队中承担什么角色,在同一个领域的软件生命

周期里都使用统一的语言进行交流。

通用语言的作用,它可以解决交流障碍这个问题,使领域专家和开发人员能够协同合作,从而确保

业务需求的正确表达。

从事件风暴建立,通用语言到领域对象设计和代码落地的完整过程。

1.在事件风暴的过程中,领域专家会和设计、开发人员一起建立领域模型,在领域建模的过程中会

形成通用的业务术语和用户故事。事件风暴也是一个项目团队统一语言的过程。

2.通过用户故事分析会形成一个个的领域对象,这些领域对象对应领域模型的业务对象,每一个业

务对象和领域对象都有通用的名词术语,并且一一映射。

3.微服务代码模型来源于领域模型,每个代码模型的代码对象跟领域对象一一对应。

设计过程中我们可以用一些表格,来记录事件风暴和微服务设计过程中产生的领域对象及其属性

比如,领域对象在DDD分层架构中的位置、属性、依赖关系以及与代码模型对象的映射关系等。

DDD分析和设计过程中的每一个环节都需要保证限界上下文内术语的统一,在代码模型设计的时

侯就要建立领域对象和代码对象的一一映射,从而保证业务模型和代码模型的一致,实现业务语言

与代码语言的统一

8、限界上下文

DDD在战略设计上提出了“限界上下文”这个概念,用来确定语义所在的领域边界。

限界上下文的定义就是:用来封装通用语言和领域对象,提供上下文环境,保证在领域之内的一些

术语、业务相关对象等(通用语言)有一个确切的含义,没有二义性。

这个边界定义了模型的适用范围,使团队所有成员能够明确地知道什么应该在模型中实现,什么不

应该在模型中实现。

限界上下文就是用来细分领域,从而定义通用语言所在的边界。

正如电商领域的商品一样,商品在不同的阶段有不同的术语,在销售阶段是商品,而在运输阶段则

变成了货物。同样的一个东西,由于业务领域的不同,赋予了这些术语不同的涵义和职责边界,这

个边界就可能会成为未来微服务设计的边界。

领域边界就是通过限界上下文来定义的。

限界上下文和微服务的关系

每个领域模型都有它对应的限界上下文,团队在限界上下文内用通用语言交流。领域内所有限界上

下文的领域模型构成整个领域的领域模型。

理论上限界上下文就是微服务的边界。我们将限界上下文内的领域模型映射到微服务,就完成了从

问题域到软件的解决方案。

可以说,限界上下文是微服务设计和拆分的主要依据。在领域模型中,如果不考虑技术异构、团队

沟通等其它外部因素,一个限界上下文理论上就可以设计为一个微服务。

不过,这里还是要提示一下:除了理论,微服务的拆分还是有很多限制因素的,在设计中不宜过度

拆分

9、总结

领域的核心思想就是将问题域逐级细分,来降低业务理解和系统实现的复杂度

通过领域细分,逐步缩小微服务需要解决的问题域,构建合适的领域模型,而领域模型映射成系统

就是微服务了。

核心域、支撑域和通用域的主要目标是:通过领域划分,区分不同子域在公司内的不同功能属性和

重要性,从而公司可对不同子域采取不同的资源投入和建设策略,其关注度也会不一样。

通用语言确定了项目团队内部交流的统一语言,而这个语言所在的语义环境则是由限界上下文来限

定的,以确保语义的唯一性。

限界上下文在微服务设计中的作用和意义是什么

而领域专家、架构师和开发人员的主要工作就是通过事件风暴来划分限界上下文。限界上下文确定

了微服务的设计和拆分方向,是微服务设计和拆分的主要依据。如果不考虑技术异构、团队沟通等

其它外部因素,一个限界上下文理论上就可以设计为一个微服务。

可以说,限界上下文在微服务设计中具有很重要的意义,如果限界上下文的方向偏离,那微服务的

设计结果也就可想而知了。因此,我们只有理解了限界上下文的真正涵义以及它在微服务设计中的

作用,才能真正发挥DDD的价值,这是基础也是前提。

限界上下文的作用是为了解决交流障碍。

通用语言定义上下文含义,限界上下文则定义领域边界,以确保每个上下文含义在它特定的边界内

都具有唯一的含义,领域模型则存在于这个边界之内。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1410393.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Web09--jQuery基础

1、jQuery概述 1.1 什么是jQuery jQuery是一款优秀的JavaScript的轻量级框架之一,封装了DOM操作、事件绑定、ajax等功能。特别值得一提的是基于jQuery平台的插件非常丰富,大多数前端业务场景都有其封装好的工具可直接使用。 jQuery下载和版本介绍 官…

qml中访问控件内部的子项

如何访问Repeater类型内部的子项、Row等布局类型内部的子项以及ListView内部的子项等。。。 1、测试代码 import QtQuick 2.0 import QtQuick.Controls 2.12 import QtQuick.Window 2.12 import QtQuick.Layouts 1.3 import QtQml 2.12Window {id: windowobjectName: "m…

彩色图像处理之彩色图像分割的python实现——数字图像处理

原理 彩色图像分割是图像处理领域的一个重要技术,它旨在将一幅彩色图像划分为多个区域或对象。其基本原理包括以下几个方面: 像素特征的提取:彩色图像分割首先涉及到像素级的特征提取。在彩色图像中,常用的特征包括颜色、纹理和…

Javadoc的讲解使用

概述:JavaDoc 是用于生成 Java 代码文档的工具。通过编写 JavaDoc 注释,可以为代码中的类、接口、方法、字段等元素添加文档注释,这些注释将被 JavaDoc 工具解析并生成相应的 HTML 文档。 目录 讲解 使用 结果 讲解 下面是一些关于 Java…

常用通信总线学习——RS232与RS485

RS232概述 RS-232标准接口(又称EIA RS-232)是常用的串行通信接口标准之一,它是由美国电子工业协会(Electronic Industry Association,EIA)联合贝尔系统公司、调制解调器厂家及计算机终端生产厂家于1970年共同制定,其全…

RocketMQ源码阅读-七-高可用

RocketMQ源码阅读-七-高可用 概述NameServer高可用Broker注册到NameServerProducer、Consumer 访问 Namesrv Broker高可用Broker主从配置Master、Slave通信组件Master与Slave的通信协议Slave节点逻辑Master节点逻辑Master_SYNC模式Producer发消息Consumer消费消息 总结 本篇分析…

如何配置Tomcat服务环境并实现无公网ip访问本地站点

文章目录 前言1.本地Tomcat网页搭建1.1 Tomcat安装1.2 配置环境变量1.3 环境配置1.4 Tomcat运行测试1.5 Cpolar安装和注册 2.本地网页发布2.1.Cpolar云端设置2.2 Cpolar本地设置 3.公网访问测试4.结语 前言 Tomcat作为一个轻量级的服务器,不仅名字很有趣&#xff0…

前出深入-机器学习

文章目录 一、K近邻算法1.1 先画一个散列图1.2 使用K最近算法建模拟合数据1.3 进行预测1.4 K最近邻算法处理多元分类问题1.5 K最近邻算法用于回归分析1.6 K最近邻算法项目实战-酒的分类1.6.1 对数据进行分析1.6.2 生成训练数据集和测试数据集1.6.3 使用K最近邻算法对数据进行建…

python3去除图片中的文字水印

声明:本文为python技术分享,仅供学习使用。 请勿用于商业用途!!! 请勿用于商业用途!!! 请勿用于商业用途!!! 以下为代码: import …

LeetCode、875. 爱吃香蕉的珂珂【中等,最小速度二分】

文章目录 前言LeetCode、875. 爱吃香蕉的珂珂【中等,最小速度二分】题目及分类思路分析及代码实现代码优化 资料获取 前言 博主介绍:✌目前全网粉丝2W,csdn博客专家、Java领域优质创作者,博客之星、阿里云平台优质作者、专注于Ja…

多维时序 | Matlab实现EVO-TCN-Multihead-Attention能量谷算法优化时间卷积网络结合多头注意力机制多变量时间序列预测

多维时序 | Matlab实现EVO-TCN-Multihead-Attention能量谷算法优化时间卷积网络结合多头注意力机制多变量时间序列预测 目录 多维时序 | Matlab实现EVO-TCN-Multihead-Attention能量谷算法优化时间卷积网络结合多头注意力机制多变量时间序列预测效果一览基本介绍程序设计参考资…

部署TOMCAT详解

目录 一、Tomcat概述 1.1Tomcat简介 1.2、Tomcat历史 1.3Tomcat官网 二、部署单实例Tomcat 1.下载Tomcat包 2. 解压Tomcat包 3.配置环境变量 4.刷新环境变量 5.查看tomcat是否安装成功 6.启动Tomcat 三、Tomcat目录介绍 1、tomcat主目录介绍 2.webapps目录介绍 3…

Unity——八叉树的原理与实现

八叉树原理 八叉树(Octree)是一种用于在三维空间中进行空间分割的数据结构。它将三维空间递归地划分为八个子空间,每个子空间对应于一个八叉树节点。这种分割方式可以有效地组织和管理场景中的对象,提高检索效率,特别…

会计等式与会计事项

目录 一. 会计等式二. 会计事项 \quad 一. 会计等式 \quad 最后利润是归所有者权益所有, 就回到了原有等式 \quad \quad \quad 二. 会计事项 \quad 会计事项: 引起会计要素增减变化的经济业务。 会计六要素: 资产 负债 所有者权益 收入 费用 利润 任何会计事项都不会破坏会计…

C++ 数论相关题目(欧拉函数、筛法求欧拉函数)

1、欧拉函数 给定 n 个正整数 ai ,请你求出每个数的欧拉函数。 欧拉函数的定义 1∼N 中与 N 互质的数的个数被称为欧拉函数,记为 ϕ(N) 。 若在算数基本定理中,Npa11pa22…pamm ,则: ϕ(N) Np1−1p1p2−1p2…pm−1p…

人工智能时代:让AIGC成为你的外部智慧源(文末送书)

🌈个人主页:聆风吟 🔥系列专栏:数据结构、网络奇遇记 🔖少年有梦不应止于心动,更要付诸行动。 文章目录 📋前言一. 什么是AIGC?二. AIGC如何运作?2.1 步骤一:收集数据2.…

day32WEB 攻防-通用漏洞文件上传二次渲染.htaccess变异免杀

本章节知识点: 1 、文件上传 - 二次渲染 2 、文件上传 - 简单免杀变异 3 、文件上传 -.htaccess 妙用 4 、文件上传 -PHP 语言特性 前置知识: 后门代码需要用特定格式后缀解析,不能以图片后缀解析脚本后门代码 ( 解析漏洞除外 ) 如&…

Aleo测试网回顾-测试网期间共释放了多少积分

上一篇我们整理了Aleo的详细项目介绍,Aleo项目详细介绍-一个兼顾隐私和可编程性的隐私公链-CSDN博客 接下来,让我们盘点下测试网期间的积分释放情况,测试网期间的奖励积分也将是Aleo主网上线后的抛压来源。测试网期间共计释放了4000万的积分…

2024转行程序员的请注意:均月薪在40-70k

前言 2023年,对大多数行业来说都是不太好过的一年。 对程序员来说也是如此,很多粉丝朋友都在说android工作特别难找,一个岗位都是几千份简历…大家心里都是特别的焦虑,本以为2024年就业情况会有好转,但实际上并非如此…

解决Windows系统本地端口被占用的问题

一、解决Windows系统本地端口被占用的问题,首先我们要在虚拟机上人为的占用本地端口 二、占用端口方法:以管理员身份运行cmd;输入net stop http;如果提示是否真的需要停止这些服务,则选择“Y”;完成后输入:sc config http startdisabled 弹出上图内容则成…