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之旅的第一站 "寓言家和鳄鱼是一样的,只是名字不同" --约翰·劳森 描述: 订单和注册上下文有一部分职责在会议预订的过程中,在此上下文中,一 ...
随机推荐
- android屏幕适配的全攻略--支持不同的屏幕尺寸适配平板和手机
一. 核心概念与单位详解 1. 什么是屏幕尺寸.屏幕分辨率.屏幕像素密度? 屏幕分辨率越大,手机越清晰 dpi就是dot per inch dot意思是点,就是每英寸上面的像素点数 android原始 ...
- 尚硅谷ajax视频教程2
7.7. 尚硅谷_佟刚_Ajax_典型应用_验证用户名是否可用 整个项目的目录路径如下所示 我们首先新建立一个web工程,在webroot下面新建立一个script的文件夹,导入jquer文件 接下来 ...
- 测试同学动手搭个简易web开发项目
技术栈 node.js, vue.js, axios, python, django, orm, restful api, djangorestframework, mysql, nginx, jen ...
- Docker搭建Rancher平台
sudo docker run -d --restart=unless-stopped -p 8080:8080 rancher/server service docker resatrt启动失败 ...
- 玩转SpringBoot之捣鼓 Redis
我们都知道,把首页数据放到Redis里,能够加快首页数据的访问速度.但是我们要如何准确又快速的将 Redis 整合到自己的 SpringBoot2.x 项目中呢?今天阿淼就带大家爬一爬其中的门门道道. ...
- Azure Monitor(二)Log Analytics
一,引言( 前情回顾) Azure Monitor 包括 Log Analytics 和 Application Insights,其提供的高级工具适用于收集和分析遥测数据,以便最大程度地提高云和本地 ...
- LeetCode65. 有效数字
这题完美的诠释了什么叫"面向测试用例编程".由于要考虑的情况很多,所以基本的思路是先根据给出的测试用例写出规则判断无效的情况,然后再根据提交的错误对剩下的情况进行特判,如果不满足所 ...
- 多核CPU硬件架构介绍
转自:http://book.51cto.com/art/201004/197196.htm SISD.MIMD.SIMD.MISD计算机的体系结构 1. 计算平台介绍 Flynn于1972年提出了计 ...
- IEEE754标准浮点格式
两种基本浮点格式:单精度和双精度.IEEE单精度格式具有24位有效数字,并总共占用32 位.IEEE双精度格式具有53位有效数字精度,并总共占用64位 两种扩展浮点格式:单精度扩展和双精度扩展.此标准 ...
- 安卓移动端line-height垂直居中出现偏移的原因,及解决方法
目前在移动端安卓手机上使用line-height属性,让它的值等于height,结果发现是不居中的.出现了一定位置的偏移情况,如果略微只有两三个像素差距是看不出来的. 左图中的字号是12px,右图中的 ...