本文参考了我的同事肖然、王威和刘尚奇于2017年7月22日在ThoughtWorks北京办公室所讲授的“领域驱动的微服务架构设计——实战工作坊”的课程内容,同时参考了我的同事亢江妹在业务分析工作中所使用的“拆分API故事”的实践方法,在此表示感谢。

目的

领域驱动的微服务架构设计工作坊,能使软件开发团队所有成员在短时间内,迅速就新产品或遗留系统的价值、用户画像、关键场景、聚合达成一致,以便让团队快速识别软件产品的问题域和解决方案域,发现微服务之间的API接口契约,并据此拆分微服务(或模块)和团队,来开发新产品或重构遗留系统。对于不打算实践微服务的团队拆分模块也有参考意义。

步骤

准备

1)召集所有相关领域专家和开发团队成员(包括:业务分析、开发、测试、DBA等)参加工作坊,准备大白纸、6种颜色(深黄-Domain Event、深蓝-Command、深绿-aggregate、深粉-external system、紫-policy、浅黄-user)报事贴、蓝丁胶和黑色三福记号笔。

事件风暴

产品价值

2)一起创建用户画像(姓名、年龄、职业、居住地、问题、目标;所见、所听、所想和所感、痛点、目标)

得到App的用户画像

3)用电梯演讲一起识别产品的核心卖点(差异化竞争优势)

得到App的电梯演讲

关键场景

4)绘制Use Case用例图,识别其中核心卖点用例(粉色)、支撑用例(橙色)和通用用例(白色,用例即用户目标),并按时间顺序;注意识别Ubiquitous Language(领域普通话)

得到系统用例

命令风暴

5)选择第一个核心卖点用例,按从左往右的顺序用贴深蓝报事贴的方式画流程图,图中每一步都是值得“埋点”的命令(深蓝)

“查看已购产品”流程图

事件风暴

6)在流程图上贴值得记录日志的业务事件(深黄,有可能一个命令触发多个事件,每个事件单独写一个报事贴)

在流程图上贴深黄的业务事件

7)在相关事件处贴该事件所触发的业务规则(紫)、该事件所源自的外部依赖系统(深粉),并在相关命令处贴该命令所源自的用户(浅黄)

在相关事件处贴该事件所触发的紫色的业务规则

聚合

8)在每个事件和命令之间贴聚合根(深绿),把具有相同生命周期(有助于维护业务一致性)和必须使用同步更新来实现数据完整性的聚合归并为同一聚合根之下,并为该聚合根取名

把聚合归并到聚合根之内

9)选择核心卖点的下一个关键场景,重复第5)~第9),直到识别并归并完所有的聚合

问题域和解决方案域

10)将各个聚合根据是否为业务核心卖点组织为子域,并识别核心子域、支撑子域和通用子域

粉红背景的是核心子域,橙色背景的是支撑子域

11)将各个子域根据开发团队的约束条件组织为限界上下文(每个限界上下文可以作为一个微服务),并识别各个限界上下文之间的关系(partnership, shared kernel, customer-supplier, conformist, anti-corruption layer, open host service, published language),拍照

识别限界上下文之间的关系

微服务之间的API接口契约

12)在关键场景流程图下方,添加若干行,每一行贴一个深绿报事贴,代表一个相关的限界上下文

13)根据流程图上的每一个事件,识别相应限界上下文为实现该事件所应对外提供的接口,拍照

API接口契约

各个微服务内部的用户故事和验收条件

14)根据限界上下文划分团队(这样划分的每个团队就是一个微服务团队),让各个微服务团队各自根据流程图中所负责的事件,编写用户故事和验收条件

15)各个微服务团队识别其所负责的限界上下文内部的名词(Aggregate Root, Entity, Value Object, Domain Events)和动词(Services),并绘制实体关系图,进行开发或重构

参考资料:

创建微服务架构的步骤_插图版:领域驱动的微服务架构设计工作坊实施步骤相关推荐

  1. 微服务详解(四):领域驱动设计

    微服务详解(一):概述 微服务详解(二):解决方案 微服务详解(三):设置开发环境 微服务详解(四):领域驱动设计 微服务详解(五):实现微服务 微服务详解(六):部署与测试 微服务详解(七):微服务 ...

  2. linux 内核 网卡驱动 移植,Linux内核移植步骤_添加DM9000网卡驱动(设备树).docx

    Linux内核移植步骤_添加DM9000网卡驱动(设备树) Linux内核移植步骤2015年05月13日星期三上午 11:05往设备树中添加网卡驱动:1.选平台,指定交叉编译工具链:(1).在Make ...

  3. 领域驱动设计(DDD)实践之路(四):领域驱动在微服务设计中的应用

    这是"领域驱动设计实践之路"系列的第四篇文章,从单体架构的弊端引入微服务,结合领域驱动的概念介绍了如何做微服务划分.设计领域模型并展示了整体的微服务化的系统架构设计.结合分层架构. ...

  4. 微信服务通知消息找回_如何通过微信第三方平台群发服务号消息通知?

    在公众号后台可以群发功能实现,第三方平台可以用微号帮功能服务号每月400次群发实现,服务号每个月可以群发400次消息,但每个粉丝每月只能收到4次消息,不可突破微信规则.本功能主要为微信服务号实现千人千 ...

  5. 大数据架构详解_【数据如何驱动增长】(3)大数据背景下的数仓建设 amp; 数据分层架构设计...

    背景 了解数据仓库.数据流架构的搭建原理对于合格的数据分析师或者数据科学家来说是一项必不可少的能力.它不仅能够帮助分析人员更高效的开展分析任务,帮助公司或者业务线搭建一套高效的数据处理架构,更是能够从 ...

  6. 如何使用ABP进行软件开发(2) 领域驱动设计和三层架构的对比

    简述 上一篇简述了ABP框架中的一些基础理论,包括ABP前后端项目的分层结构,以及后端项目中涉及到的知识点,例如DTO,应用服务层,整洁架构,领域对象(如实体,聚合,值对象)等. 笔者也曾经提到,AB ...

  7. 资深架构师助你上手软件领域驱动设计 DDD

    作者:faryrong,腾讯 CSIG 后台开发工程师 最近看了一本书<解构-领域驱动设计>,书中提出了领域驱动设计统一过程(DDDRUP),它指明了实践 DDD 的具体步骤,并很好地串联 ...

  8. DDD(领域驱动设计)分层架构

    一.分层架构的模型 DDD全称为(Domain-Driven Design,简称DDD),领域驱动设计. 主要分为四层: 展现层:它负责向用户显示信息和解释用户命令,完成前端界面逻辑.这里的用户不一定 ...

  9. DDD领域驱动设计实战-分层架构及代码目录结构

    代码结构 DDD并没有给出标准的代码模型,不同的人可能会有不同理解. 按DDD分层架构的分层职责定义,在代码模型里分别为用户接口层.应用层.领域层和基础层,建立了 interfaces.applica ...

最新文章

  1. LeetCode算法题10:DFS/BFS-扫雷游戏
  2. 1.eclipse怎么样新建web项目,eclipse新建web项目
  3. 全国计算机等级2级试题,全国计算机等级考试二级QBASIC试题
  4. C#中对泛型List进行分组输出元素
  5. 机器学习——支持向量机SVM之非线性模型(原问题和对偶问题)
  6. win1编辑java环境,在win7下配置java编译环境
  7. spring(4)面向切面的Spring(AOP)
  8. 前端学习(86):标签嵌套规范
  9. linux nfs命令,linux命令:NFS服务
  10. F5 虚拟机下载 和 试用Key 申请
  11. 人工智能为什么要从本科生抓起?
  12. JSON for Modern C++ 3.6.0 发布
  13. Python实现数据技术|爬虫便可获取免费百度文库付费文档
  14. “应用程序无法正常启动 0xc0150002”如何解决?
  15. 数据结构与算法分析(一)基础部分与算法分析方法
  16. python中fabs什么意思_Python中abs()和fabs()方法之间的区别
  17. 期权学习之常见收益结构
  18. 小程序功能(七)电子签名
  19. Doris:部署Broker
  20. Windows11切换微软账户

热门文章

  1. ArcGIS Desktop + Engine 9.3 License(转)
  2. CentOS7重置root密码
  3. 一文读懂:支持向量机(SVM)非线性分类问题
  4. 几行Python代码实现人像动漫化, 让头像独一无二
  5. App 数据缓存方案
  6. Notepad++ 的XML格式化功能
  7. 在MYSQL 自增,默认值,时间默认字段
  8. How to Write and Publish a Scientific Paper-How to Write the Results
  9. 苹果iPhone 5s延续了上一代iPhone5的经典设计
  10. Selenium安装教程