你问的限界上下文(BC)是什么?

“特定模型的分隔适用性。限界上下文使团队成员能够清楚地分享对必须一致的内容以及可以独立开发的内容。”

看定义看懂了吗?

  • BC是最难解释的DDD原则之一,但它可能是最重要的,因为没有BC就不能做DDD。因此,您必须了解如何在实际获取根聚合,聚合,实体和值对象之前识别BC。
  • 让我们再试一次:上下文意味着具体的责任。限界上下文意味着责任是通过明确的边界来强制执行的

举个例子

过程

  • 约翰,X公司的开发人员。约翰在IT部门工作
  • 丽塔,她是同一家公司的会计师。丽塔在会计部门工作
  • 此时,IT部门是一个限界上下文,会计部门是另一个限界上下文
  • IT部门有责任处理公司中与IT相关的所有事务,而会计部门处理与会计相关的所有事务
  • 约翰不会进入丽塔的办公室并修改工资单,而丽塔也不会去约翰的办公室并修改他的代码。
  • 虽然他们可以这么做,但这将是一个丑闻。因为如果他们这样做,他们将超越他们的界限。
  • 如果丽塔在会计软件(内部开发)中发现错误,她会致电IT部门处理。她不会启动Visual Studio并开始搞乱代码。这既不是她的责任同时她也不需要知道怎么做,即使她知道VS是约翰用来编写代码的程序(事实上,VS在会计师的计算机上将是一个非常奇怪的软件)
  • 同样明智的是,工资单文件或发票在IT部门中是没有位置的。
  • 当然,当约翰遇到涉及工资单的问题时,他要求丽塔调查一下。
  • 两者都尊重彼此的界限,并根据自己的责任行事。
  • 但IT部门本身分为两组:软件开发组和管理组。第一组实现功能并修复错误。第二组处理服务器。每个组也是有限的上下文。他们有自己的责任和明确的界限。 DBA不编写C#代码,约翰不会破坏服务器配置。每个人都按照自己的责任行事并在自己的范围内行事。

两者都有非常精确的责任,他们的界限非常明确。

小结

所以,IT部门是BC。约翰是其模型的一部分。
事实上,所有有意义的东西(开发人员,服务器等)都是BC的一部分,它应该在内部保持一致(开发人员应该编写软件而不是询问发票)。
这意味着丽塔在IT方面没有地位,她不应该处理与IT相关的任何事情。
丽塔是会计BC的一部分。她可能正在访问IT办公室,但她只是一个匆匆过客,她对该部门毫无意义,没有人希望她编写代码或充当开发人员。约翰可能喜欢丽塔,并花了一些时间在她的办公室,但这并不能使约翰成为一名会计师。

不同BC之间的“合作”

BC与BC的关系

我们可以看到,在一定程度上,BC是自治的,它们不重叠。此外,如果来自一个BC(X)的对象转到其他BC(Y),它并不意味着它现在是后者的一部分,它仅被视为一个对Y没有意义的简单对象。所以它们几乎是独立的,那么他们如何一起工作?

不同BC之间该如何合作

例子说明

  • 登场新人物 -> 安德鲁(IT部门经理)

按照例子来说,当会计部门必须和IT部门合作的时候该如何做?

他们通过与合适的人交谈来做到这一点。

  • 当丽塔需要一个新的软件功能时,她可以告诉约翰,但约翰的经理(安德鲁)最终决定是否添加,以及将添加哪些功能。
  • 当你想要新功能甚至修复一些错误时,是需要与安德鲁交流的。安德鲁是IT经理,他告诉约翰(或IT的其他任何人)下一步该做什么。
  • 丽塔不能忽视安德鲁,因为这是IT部门的规则:安德鲁做决定。你必须按照安德鲁想要的方式提出你的想法,否则他们会被拒绝。当要求对IT不符合方式且没有意义的时候,要求会自动被拒绝。
  • 安德鲁是IT BC的反腐败层,没有什么决定能够跳过他,它适合于IT部门的内部组织。

类比到代码

这些例子很简单,但我们的代码呢?我们确实希望我们的BC能够解耦,所以BC1不应该知道BC2。好吧,这个想法是一个BC不应该知道其他BC的内部,这两个可以使用公共对象(DTO)直接将消息传递给另一个或者是专门的适配器,它知道如何与两个BC通信。虽然通过域事件(基本上是更高级别使用的观察者模式)的首选方法。

结束语

哇,很长的帖子,但我希望你现在对一个有限的背景有一个非常明确的理解。以下是常见有界上下文的一些示例:应用程序本身,UI层,域层以及它们的最小BC:对象,任何对象。

参考

DDD - The Bounded Context Explained

限界上下文(BC)是什么相关推荐

  1. DDD领域驱动设计(DP、Entity介绍;DDD实现流程;DDD聚合Aggregate;限界上下文(Bounded Context))

    DDD(Domain Driven Design) DP(Domain Primitive) define: 一切模型.方法.架构的基础,是指在特定领域.拥有精准定义.可以自我验证.拥有行为的对象,可 ...

  2. DDD 聚合根 限界上下文

    案例 微信账号:手机号 用户A注销微信账号,需要钱包数据.银行卡数据.亲属卡信息,同时被删除 对一个对象修改,会涉及大量关联对象状态的修改. 需要使所有关联对象的状态保持一致 Aggregate 聚合 ...

  3. 商品领域ddd_DDD领域驱动实战 - 限界上下文(bounded context)

    限界上下文定义领域边界,以确保每个上下文含义在它特定的边界内都具有唯一的含义,领域模型则存在于这个边界之内. 通用语言 在事件风暴过程中,通过团队交流达成共识的,能够简单.清晰.准确描述业务涵义和规则 ...

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

    1. 引言 限界上下文可以拆分为两个词,限界和上下文. 限界:是指一个界限,具体的某一个范围. 上下文:个人理解就是语境. 比如我们常说的段子: "我想静静." 这个句子一般是想表 ...

  5. 上下伸缩代码_CQRS之旅——旅程4(扩展和增强订单和注册限界上下文)

    旅程4:扩展和增强订单和注册限界上下文 进一步探索订单和注册的有界上下文."我明白,如果一个人想看些新鲜的东西,旅行并不是没有意义的."儒勒·凡尔纳,环游世界80天 对限界上下文的 ...

  6. DDD 实战 (5):限界上下文映射和系统分层架构

    在完成了限界上下文的识别(也就是系统"最粗粒度"的模块划分)后,我们需要对这些上下文之间的协作关系进行分析--即"限界上下文关系映射".也只有在完成上下文关系映 ...

  7. DDD微服务架构设计第三课 DDD领域中的聚合、工厂和仓库、限界上下文

    05 聚合.仓库与工厂:傻傻分不清楚 上一讲,我们知道了,要将领域模型最终转换为程序设计,可以落实到 3 种类型的对象设计,即服务.实体与值对象,然后进行一些贫血模型与充血模型的设计思路.但这远远不够 ...

  8. 领域、子域和限界上下文概述

    1.概述 1.1 领域 广义领域:领域(Domain)即是一个组织所做的事情以及其中所包含的一切.每个组织都有它自己的业务范围和做事方式.这个业务范围以及在其中所进行的活动都有它自己的业务范围和做事方 ...

  9. “子域”和“限界上下文”

    在DDD中包括问题域和解决方案域两个不同的维度.问题域主要从业务视角来考虑,完成从领域到子域的分解,而解决方案域则主要从技术实现的角度,通过划分限界上下文和采用DDD战术设计完成微服务拆分和落地.&q ...

最新文章

  1. 360手机麦克风测试软件,【奇酷小技巧】教你无需ROOT增大话筒、听筒和外放声音!...
  2. 777后无效 执行chmod_厉害了!南航777机队和南航空姐在人民大会堂接受表彰!
  3. Centos7安装配置Xhgui
  4. OCR文本检测-RRPN
  5. SQL 已有数据的表创建标识列
  6. Spring boot Scheduled 配置
  7. [转]ASP.NET 页生命周期概述
  8. Android两种存储用户临时数据的方式比较:Preferences Bundle
  9. pcie转m2装系统win10_m.2固态硬盘怎么安装win10系统
  10. 聚米移动广告平台——广告主不可错过的投放选择
  11. python批量导入图片_Python批量导入图片生成PowerPoint 2007+文件
  12. 评估智能对话机器人的7大数据指标
  13. 利用requests库下载视频
  14. linux 文件系统 panic,Linux kernel panic解决方法
  15. 蓝牙核心技术了解(蓝牙协议、架构、硬件和软件笔记)
  16. vue里面变量名前面加三个点代表什么意思?
  17. java 打印表格文件
  18. 基于JSP的智能道路交通信息管理系统
  19. (总)百度AI 平台API调用
  20. 了解大数据 之 商业智能BI和大数据

热门文章

  1. 前端python开发_【2020Python修炼记】前端开发之 前端工具和HTML
  2. Linux -- 项目服务部署学习
  3. 基本函数依赖和候选键_[总结]关系数据库设计基础(函数依赖、无损连接性、保持函数依赖、范式、……)...
  4. 【第23期】令人舒心又伤脑的12张数学原理动图!你能看懂几个
  5. 通过复制粘贴输入网址
  6. 现60岁,一次性缴纳60万养老金,一个月领取4000元,你愿意吗
  7. 2021.03.06【NOIP提高B组】模拟 总结
  8. 大多数企业数字化转型的真正目的其实只是为了能多裁点人
  9. springboot+vue+elementui校园运动会场地预约管理系统java
  10. 海思开发板FFmpeg+Nginx,推流RTMP播放(优秀教程收集+实操整理)