插图版:领域驱动的微服务架构设计工作坊实施步骤

本文参考了我的同事肖然、王威和刘尚奇于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),并绘制实体关系图,进行开发或重构

参考资料:

Domain-Driven Design
《领域驱动设计》
领域驱动的微服务架构设计——实战工作坊
Domain-Driven Design Distilled
Introducing EventStorming

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,189评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,577评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,857评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,703评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,705评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,620评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,995评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,656评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,898评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,639评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,720评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,395评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,982评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,953评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,195评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,907评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,472评论 2 342

推荐阅读更多精彩内容