DDD之5限界上下文-定义领域边界的利器

上图是一张普通地图,最刺眼的就是边界?
非常好奇地图绘制工程师是如何描绘如此弯曲多变的边界的?强制行政区域还是人群历史原因自然的人以群分?
我们再换个视角,对工程师或者架构师来说,微服务的边界如何划分呢?
基于DDD设计方法论中的概念 限界上下文 来划分微服务的边界;
背景
架构师小李正在团队推行DDD设计方法论,领域建模和系统建设过程中,很多岗位需要参加进来,比如产品经理,领域专家,项目经理,架构师,开发经理,测试经理。对同样的领域知识,不同的人可能有不同的认识,交流起来存在一定障碍。
假如你是小李,你会如何消除这种交流障碍呢?
答案是今天的主角:通用语言和限界上下文。
先简单的厘清这两个概念。
| 名词 | 概念 |
|---|---|
| 通用语言 | 定义上下文含义 |
| 限界上下文 | 定义领域的边界,确保每个上下文的语义(通用语言)在边界内的唯一性含义 |
下面,我们拿显微镜来看看到底什么是通用语言?限界上下文又是什么东西?
通用语言
通用语言:团队交流达成共识的能够明确简单清晰的描述业务规则和业务含义的语言就是通用语言。
用途:通用语言是团队的统一语言,在团队中不管你是什么角色,在同一领域的软件生命周期里都使用统一语言进行交流。
价值:
- 解决各岗位的沟通障碍问题,促进不同岗位的和合作,确保业务需求的正确表达。
- 通用语言贯穿于整个设计过程,基于通用语言可以开发出可读性更好的代码,能准确的把业务需求转化为代码。

类比: 义勇军对中国人来说就是通用语言,大家都知道这是我们的国歌,没有二义性;
通用语言的组成:
| 组成部分 | 说明 | 代码对应 |
|---|---|---|
| 术语 | 名词:给领域命名,比如订单,商品;动词:给命令和事件命名; | 名词:对应实体动词:命令或者事件 |
DDD领域建模和系统落地过程:
既然是一种映射,那么可以整理成一张表格。
记录事件风暴中产生的领域对象的位置,属性和在代码模型中对应的代码对象的对应关系。
格式如下:

要点:DDD的设计和分析的过程中,要保证术语在限界上下文中的统一,并保证业务模型中的领域对象跟系统模型中的代码对象一一对应。从而保证业务模型跟代码模型的一致性。
限界上下文
定义:战略设计中确定语义所在的领域边界就是限界上下文。
为了好理解,这里对比一下中文和DDD:
| 对比项目 | 语言 | 语义环境 |
|---|---|---|
| 中文 | 汉语 | 语言环境 |
| DDD | 通用语言 | 限界上下文 |
限界:即边界上下文:即语义环境;
综合起来:即带边界的语义环境。
限界上下文是微服务拆分和设计的主要边界依据,当然微服务还有其他的划分边界依据,需要综合考虑;我们将限界上下文内的领域模型映射到微服务就完成了从问题域到软件的解决方案。
小结
问题?
为什么有限界上下文的概念,除了解决交流障碍,还有什么更具体的原因吗? 确定了领域的边界,是微服划分的主要依据 封装了领域模型 通用语言,确定了模型的边界哪些该做哪些不该做
限界上下文在微服务设计的作用和意义? 微服务边界划分的主要依据
最后小结汇总成一张图。

原创不易,关注诚可贵,转发价更高!转载请注明出处,让我们互通有无,共同进步,欢迎沟通交流。
我会持续分享Java软件编程知识和程序员发展职业之路,欢迎关注,我整理了这些年编程学习的各种资源,关注公众号‘李福春持续输出’,发送'学习资料'分享给你!
DDD之5限界上下文-定义领域边界的利器的更多相关文章
- DDD - 概述 - 聚合 - 限界上下文 (四)
最重要的一句话 DDD的所有有相关理论中,只有一句是至关重要的,但是也是最容易被忽略和最难做到的,抛弃传统的设计方式(思路)的思想,这句话起了决定性的作用,但是99%的人都忽略了或者在开始无法正视或理 ...
- 【DDD】领域驱动设计实践 —— 限界上下文识别
本文从战略层面街上DDD中关于限界上下文的相关知识,并以ECO系统为例子,介绍如何识别上下文.限界上下文(Bounded Context)定义了每个模型的应用范围,在每个Bounded Context ...
- 从壹开始微服务 [ DDD ] 之三 ║ 简单说说:领域、子域、限界上下文
前言 哈喽大家好,DDD领域驱动设计系列又开始了,前天周二的那篇入门文章中,也收到了一定的效果(写小说的除外),同时我也是倍感鸭梨,怎么说呢,DDD领域驱动设计已经有十年历史了,甚至更久,但是包括我在 ...
- IDDD 实现领域驱动设计-理解限界上下文
上一篇:<IDDD 实现领域驱动设计-理解领域和子域> <实现领域驱动设计>前两章内容,基本上读完了,和<领域驱动设计>不同的是,它把很多的概念都放在前面进行讲述了 ...
- DDD中限界上下文与通用语言的作用
什么是通用语言 通用语言, 最主要的目的就是减少交流中信息丢失, 在实际开发中, 可能关联很多人, 例如有业务层面的业务细节制定者.领域专家.产品经理.项目经理 .架构师.开发经理.测试经理等等, 即 ...
- DDD理论学习系列(3)-- 限界上下文
1. 引言 限界上下文可以拆分为两个词,限界和上下文. 限界:是指一个界限,具体的某一个范围. 上下文:个人理解就是语境. 比如我们常说的段子: "我想静静." 这个句子一般是想表 ...
- 学习DDD的初步尝试,从最基础的开始,业务介绍,划分限界上下文 ,建立模型
Conference业务简介 Conference是这样一个系统,它提供了一个在线创建会议以及预订会议座位的平台.这个系统的用户有两类: 1:客户,可以创建和管理会议. 2:会议座位预定者,可以预订会 ...
- DDD理论学习系列(2)-- 领域
DDD理论学习系列目录 1. 引言 领域一词,主要有以下两个意思: 一国主权所达之地. 学术思想或社会活动的范围. 不管是指国家的主权范围也好还是学术活动范围,都是在讲一个范围,一个界限. 比如我们常 ...
- CQRS之旅——旅程3(订单和注册限界上下文)
旅程3:订单和注册限界上下文 CQRS之旅的第一站 "寓言家和鳄鱼是一样的,只是名字不同" --约翰·劳森 描述: 订单和注册上下文有一部分职责在会议预订的过程中,在此上下文中,一 ...
随机推荐
- Spring Boot]SpringBoot四大神器之Actuator
论文转载自博客: https://blog.csdn.net/Dreamhai/article/details/81077903 https://bigjar.github.io/2018/08/19 ...
- xutils工具上传日志文件--使用https并且带进度条显示
package logback.ecmapplication.cetcs.com.myapplication; import android.app.Activity; import android. ...
- CSS定位(Positioning)
CSS 定位和浮动 CSS 为定位和浮动提供了一些属性,利用这些属性,可以建立列式布局,将布局的一部分与另一部分重叠,还可以完成多年来通常需要使用多个表格才能完成的任务. 一切皆为框 div.h1 或 ...
- Python实用笔记 (20)面向对象编程——继承和多态
当我们定义一个class的时候,可以从某个现有的class继承,新的class称为子类(Subclass),而被继承的class称为基类.父类或超类(Base class.Super class). ...
- webpack4.*入门笔记
全是跟着示例做的.看下面文章 入门 1.nodejs基础 http://www.runoob.com/nodejs/nodejs-tutorial.html 2.NPM 学习笔记整理 https:// ...
- 个人对于flask中蓝图的理解
什么是蓝图? 蓝图可以理解为,是一种对项目中的代码进行模块化管理的工具,相当于python中的包为什么要使用蓝图? 在一个py文件中具有多个功能代码,不利于维护和管理. 如果在其他的模块中去调用视图函 ...
- Netty 源码解析(八): 回到 Channel 的 register 操作
原创申明:本文由公众号[猿灯塔]原创,转载请说明出处标注 今天是猿灯塔“365篇原创计划”第八篇. 接下来的时间灯塔君持续更新Netty系列一共九篇 Netty 源码解析(一): 开始 Netty 源 ...
- css样式冲突怎么解决?
一个网页有时会使用两种CSS,那发生css样式冲突要怎么解决?下面本篇文章就来给大家介绍一下发生css样式冲突的解决方法,希望对大家有所帮助. css冲突怎么解决? 解决方法有很多,如果可以对html ...
- python中获取文件路径的几种方式
# 如果执行文件为E:\aa\bb\aa.py 1.获取当前路径 current_path11 = os.path.abspath(__file__) current_path12 = os.path ...
- 【题解】uva1104 chips challenge
原题传送门 题目分析 给定一张n*n的芯片. '.'表示该格子可以放一个零件. 'C'表示该格子已经放了一个零件(不能拆下). '/'表示该格子不能放零件. 要求在芯片的现有基础上,放置尽可能多的零件 ...
