如何有效识别限界上下文?

2024-05-07 13:04
文章标签 有效 识别 上下文 限界

本文主要是介绍如何有效识别限界上下文?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在实施DDD的过程中,识别限界上下文是一大难点,但也并非无章可循。在本文内容中,我们将分别从业务维度、工作维度以及技术维度进行展开,讨论如何有效识别限界上下文的方法和技巧。

从业务维度识别限界上下文

从业务维度识别限界上下文的基本思路很明确,就是围绕业务流程的组成结构进行切入。

  1. 业务维度的表现形式

业务维度常见的有两种表现形式,即:

  1. 流程+角色+活动
  2. 角色+行为

我们先来看第一种业务维度的表现形式,如果用图例来展示这种业务维度,可以得到类似下图所示的效果。

在上图中,我们看到业务维度的组成包括流程、角色以及活动三个组成部分,构成了流程+角色+活动的表现形式。随着业务流程的演进,我们可以划分不同的边界并提取不同的限界上下文。而在每个上下文中,我们可以进一步提取多个活动。从这种表现形式看,原本基于某个角色的完整业务流程就被认为切割成多个片段。因此,限界上下文可以被认为是动态的业务流程被边界静态切分的产物。

业务维度的另一种常见表现形式是角色+行为,我们可以使用UML中的用例图来展示这种业务维度,如下图所示。


在上图中,我们看到在A限界上下文中存在多个用例,其中用例4又与另一个B限界上下文发生关联关系。用例描述了业务场景和功能,可以用来提取限界上下文。

  1. 业务相关性

当我们通过业务维度识别出若干限界上下文之后,下一步工作是对这些限界上下文进行分析,并判断是否需要考虑对已识别上下文进行优化。这时候就需要引入业务相关性这个概念,因为业务相关性较高的业务逻辑往往应该被合并到同一个限界上下文中。

一般认为,业务相关性有两种类型,即语义相关性和功能相关性。所谓语义相关性,指的是根据名称就能体现业务的相关性,例如浏览商品、发布商品、推荐商品都属于“商品”类的业务。而功能相关性需要根据业务目标来确定,例如推荐商品、活动促销、积分折扣都是为了做“营销”。在基于业务维度识别限界上下文的过程中,你可以根据语义相关性和功能相关性来对上下文进行重新审视。

从工作维度识别限界上下文

从工作维度识别限界上下文跟团队工作相关,是一类依托于管理理念的上下文识别方法。DDD实施过程所崇尚的团队是特征团队。这里引出了一个概念,即特征团队(Feature Team)。我们知道团队的组建方式可以是职能团队也可以是特征团队,前者关注于某一个特定职能,如常见的服务端、前端、数据库、UI等功能团队,而后者则代表一种跨职能(Cross Function)的团队构建方式,团队中包括服务端、前端等各种角色。在DDD工作坊的实施方法中,特征团队的范围更为广泛,可以包含与这个产品和项目相关的所有成员。正常情况下,一个特征团队可以同时应对多个限界上下文的开发需求。因此,判断上下文识别是否合理的标准就是:

一个特征团队是否能够同时开发若干个限界上下文?

从工作维度讲,如果一个特征团队无法同时开发若干个限界上下文,就说明这些限界上下文之间存在较强的依赖关系,边界的拆分不合理,需要进一步识别限界上下文。

从技术维度识别限界上下文

从技术维度识别限界上下文是最符合技术人员的思维方式,我们通过一个示例就可以让你掌握这种识别方法。例如,在电商系统中,我们基于业务维度或工作维度已经成功提取了若干个限界上下文,如下图所示。


现在,我们明确系统需要考虑质量需求,即系统需要应对高并发场景下的商品查询需求。这时候,从技术维度出发,我们就可以专门提取一个实现多元化搜索功能的限界上下文,如下图所示。


接着,我们进一步明确系统需要考虑架构需求,即为了实现技术复用,系统需要在商品、支付、搜索等功能中根据用户画像实现千人千面的商品推荐。显然,从技术维度出发,我们也可以专门提取一个实现推荐功能的限界上下文,如下图所示。


正如前面示例所展示的,基于技术维度的识别方法往往作用于业务维度和工作维度之后,这也符合正常的系统建模顺序,先提炼业务需求再梳理技术需求。

让我们对识别限界上下文的三种方法进行总结,下图可以帮助你更好的理解它们之间的实施方法和特性。


这篇关于如何有效识别限界上下文?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/967425

相关文章

阿里开源语音识别SenseVoiceWindows环境部署

SenseVoice介绍 SenseVoice 专注于高精度多语言语音识别、情感辨识和音频事件检测多语言识别: 采用超过 40 万小时数据训练,支持超过 50 种语言,识别效果上优于 Whisper 模型。富文本识别:具备优秀的情感识别,能够在测试数据上达到和超过目前最佳情感识别模型的效果。支持声音事件检测能力,支持音乐、掌声、笑声、哭声、咳嗽、喷嚏等多种常见人机交互事件进行检测。高效推

浅谈主机加固,六种有效的主机加固方法

在数字化时代,数据的价值不言而喻,但随之而来的安全威胁也日益严峻。从勒索病毒到内部泄露,企业的数据安全面临着前所未有的挑战。为了应对这些挑战,一种全新的主机加固解决方案应运而生。 MCK主机加固解决方案,采用先进的安全容器中间件技术,构建起一套内核级的纵深立体防护体系。这一体系突破了传统安全防护的局限,即使在管理员权限被恶意利用的情况下,也能确保服务器的安全稳定运行。 普适主机加固措施:

【Python知识宝库】上下文管理器与with语句:资源管理的优雅方式

🎬 鸽芷咕:个人主页  🔥 个人专栏: 《C++干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 文章目录 前言一、什么是上下文管理器?二、上下文管理器的实现三、使用内置上下文管理器四、使用`contextlib`模块五、总结 前言 在Python编程中,资源管理是一个重要的主题,尤其是在处理文件、网络连接和数据库

损坏SD数据恢复的8种有效方法

SD卡被用于许多不同的产品来存储重要数据,如图片和重要的商业文件。如果您的SD卡坏了,您需要SD数据恢复来获取您的信息。通过从损坏的SD卡中取回数据,您可以确保重要文件不会永远丢失,这对于工作或个人原因是非常重要的。 有许多东西会损坏SD卡,因此有必要从中恢复数据。处理不当,如打碎或沾湿,会使卡无法使用。文件系统中的错误或错误倾倒都可能导致损坏。另一个需要好的SD卡恢复软件的常见问题是意外删除文

Clion不识别C代码或者无法跳转C语言项目怎么办?

如果是中文会显示: 此时只需要右击项目,或者你的源代码目录,将这个项目或者源码目录标记为项目源和头文件即可。 英文如下:

71-java 导致线程上下文切换的原因

Java中导致线程上下文切换的原因通常包括: 线程时间片用完:当前线程的时间片用完,操作系统将其暂停,并切换到另一个线程。 线程被优先级更高的线程抢占:操作系统根据线程优先级决定运行哪个线程。 线程进入等待状态:如线程执行了sleep(),wait(),join()等操作,使线程进入等待状态或阻塞状态,释放CPU。 线程占用CPU时间过长:如果线程执行了大量的I/O操作,而不是CPU计算

win7系统中C盘空间缩水的有效处理方法

一、深度剖析和完美解决   1、 休眠文件 hiberfil.sys :   该文件在C盘根目录为隐藏的系统文件,隐藏的这个hiberfil.sys文件大小正好和自己的物理内存是一致的,当你让电脑进入休眠状态时,Windows 7在关闭系统前将所有的内存内容写入Hiberfil.sys文件。   而后,当你重新打开电脑,操作系统使用Hiberfil.sys把所有信息放回内存,电脑

YOLOv8改进实战 | 注意力篇 | 引入CVPR2024 PKINet 上下文锚点注意力CAAttention

YOLOv8专栏导航:点击此处跳转 前言 YOLOv8 是由 YOLOv5 的发布者 Ultralytics 发布的最新版本的 YOLO。它可用于对象检测、分割、分类任务以及大型数据集的学习,并且可以在包括 CPU 和 GPU 在内的各种硬件上执行。 YOLOv8 是一种尖端的、最先进的 (SOTA) 模型,它建立在以前成功的 YOLO 版本的基础上,并引入了新的功能和改进,以

Spring容器上下文

目录 一 什么是spring容器上下文 二 spring容器上下文可以做什么 三 如何使用 1.实现ApplicationContextAware接口 2.代码测试 一 什么是spring容器上下文 你可以把它理解成就是spring容器,它主要用于管理Bean对象,包括bean的生命周期,bean的注入等等。 二 spring容器上下文可以做什么 我们刚刚上面

BERN2(生物医学领域)命名实体识别与命名规范化工具

BERN2: an advanced neural biomedical named entity recognition and normalization tool 《Bioinformatics》2022 1 摘要 NER和NEN:在生物医学自然语言处理中,NER和NEN是关键任务,它们使得从生物医学文献中自动提取实体(如疾病和药物)成为可能。 BERN2:BERN2是一个工具,