插圖版:領(lǐng)域驅(qū)動(dòng)的微服務(wù)架構(gòu)設(shè)計(jì)工作坊實(shí)施步驟

本文參考了我的同事肖然妒蛇、王威和劉尚奇于2017年7月22日在ThoughtWorks北京辦公室所講授的“領(lǐng)域驅(qū)動(dòng)的微服務(wù)架構(gòu)設(shè)計(jì)——實(shí)戰(zhàn)工作坊”的課程內(nèi)容秧廉,同時(shí)參考了我的同事亢江妹在業(yè)務(wù)分析工作中所使用的“拆分API故事”的實(shí)踐方法桅咆,在此表示感謝。

目的

領(lǐng)域驅(qū)動(dòng)的微服務(wù)架構(gòu)設(shè)計(jì)工作坊,能使軟件開發(fā)團(tuán)隊(duì)所有成員在短時(shí)間內(nèi),迅速就新產(chǎn)品或遺留系統(tǒng)的價(jià)值励两、用戶畫像、關(guān)鍵場景囊颅、聚合達(dá)成一致当悔,以便讓團(tuán)隊(duì)快速識別軟件產(chǎn)品的問題域和解決方案域,發(fā)現(xiàn)微服務(wù)之間的API接口契約踢代,并據(jù)此拆分微服務(wù)(或模塊)和團(tuán)隊(duì)盲憎,來開發(fā)新產(chǎn)品或重構(gòu)遺留系統(tǒng)。對于不打算實(shí)踐微服務(wù)的團(tuán)隊(duì)拆分模塊也有參考意義胳挎。

步驟

準(zhǔn)備

1)召集所有相關(guān)領(lǐng)域?qū)<液烷_發(fā)團(tuán)隊(duì)成員(包括:業(yè)務(wù)分析焙畔、開發(fā)、測試串远、DBA等)參加工作坊,準(zhǔn)備大白紙儿惫、6種顏色(深黃-Domain Event澡罚、深藍(lán)-Command、深綠-aggregate肾请、深粉-external system留搔、紫-policy、淺黃-user)報(bào)事貼铛铁、藍(lán)丁膠和黑色三福記號筆隔显。

事件風(fēng)暴

產(chǎn)品價(jià)值

2)一起創(chuàng)建用戶畫像(姓名、年齡饵逐、職業(yè)括眠、居住地、問題倍权、目標(biāo)掷豺;所見、所聽、所想和所感当船、痛點(diǎn)题画、目標(biāo))

得到App的用戶畫像

3)用電梯演講一起識別產(chǎn)品的核心賣點(diǎn)(差異化競爭優(yōu)勢)

得到App的電梯演講

關(guān)鍵場景

4)繪制Use Case用例圖,識別其中核心賣點(diǎn)用例(粉色)德频、支撐用例(橙色)和通用用例(白色苍息,用例即用戶目標(biāo)),并按時(shí)間順序壹置;注意識別Ubiquitous Language(領(lǐng)域普通話)

得到系統(tǒng)用例

命令風(fēng)暴

5)選擇第一個(gè)核心賣點(diǎn)用例竞思,按從左往右的順序用貼深藍(lán)報(bào)事貼的方式畫流程圖,圖中每一步都是值得“埋點(diǎn)”的命令(深藍(lán))


“查看已購產(chǎn)品”流程圖

事件風(fēng)暴

6)在流程圖上貼值得記錄日志的業(yè)務(wù)事件(深黃蒸绩,有可能一個(gè)命令觸發(fā)多個(gè)事件衙四,每個(gè)事件單獨(dú)寫一個(gè)報(bào)事貼)


在流程圖上貼深黃的業(yè)務(wù)事件

7)在相關(guān)事件處貼該事件所觸發(fā)的業(yè)務(wù)規(guī)則(紫)、該事件所源自的外部依賴系統(tǒng)(深粉)患亿,并在相關(guān)命令處貼該命令所源自的用戶(淺黃)


在相關(guān)事件處貼該事件所觸發(fā)的紫色的業(yè)務(wù)規(guī)則

聚合

8)在每個(gè)事件和命令之間貼聚合根(深綠)传蹈,把具有相同生命周期(有助于維護(hù)業(yè)務(wù)一致性)和必須使用同步更新來實(shí)現(xiàn)數(shù)據(jù)完整性的聚合歸并為同一聚合根之下,并為該聚合根取名


把聚合歸并到聚合根之內(nèi)

9)選擇核心賣點(diǎn)的下一個(gè)關(guān)鍵場景步藕,重復(fù)第5)~第9)惦界,直到識別并歸并完所有的聚合

問題域和解決方案域

10)將各個(gè)聚合根據(jù)是否為業(yè)務(wù)核心賣點(diǎn)組織為子域,并識別核心子域咙冗、支撐子域和通用子域


粉紅背景的是核心子域沾歪,橙色背景的是支撐子域

11)將各個(gè)子域根據(jù)開發(fā)團(tuán)隊(duì)的約束條件組織為限界上下文(每個(gè)限界上下文可以作為一個(gè)微服務(wù)),并識別各個(gè)限界上下文之間的關(guān)系(partnership, shared kernel, customer-supplier, conformist, anti-corruption layer, open host service, published language)雾消,拍照


識別限界上下文之間的關(guān)系

微服務(wù)之間的API接口契約

12)在關(guān)鍵場景流程圖下方灾搏,添加若干行,每一行貼一個(gè)深綠報(bào)事貼立润,代表一個(gè)相關(guān)的限界上下文
13)根據(jù)流程圖上的每一個(gè)事件狂窑,識別相應(yīng)限界上下文為實(shí)現(xiàn)該事件所應(yīng)對外提供的接口,拍照


API接口契約

各個(gè)微服務(wù)內(nèi)部的用戶故事和驗(yàn)收條件

14)根據(jù)限界上下文劃分團(tuán)隊(duì)(這樣劃分的每個(gè)團(tuán)隊(duì)就是一個(gè)微服務(wù)團(tuán)隊(duì))桑腮,讓各個(gè)微服務(wù)團(tuán)隊(duì)各自根據(jù)流程圖中所負(fù)責(zé)的事件泉哈,編寫用戶故事和驗(yàn)收條件
15)各個(gè)微服務(wù)團(tuán)隊(duì)識別其所負(fù)責(zé)的限界上下文內(nèi)部的名詞(Aggregate Root, Entity, Value Object, Domain Events)和動(dòng)詞(Services),并繪制實(shí)體關(guān)系圖破讨,進(jìn)行開發(fā)或重構(gòu)

參考資料:

Domain-Driven Design
《領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)》
領(lǐng)域驅(qū)動(dòng)的微服務(wù)架構(gòu)設(shè)計(jì)——實(shí)戰(zhàn)工作坊
Domain-Driven Design Distilled
Introducing EventStorming

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末丛晦,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子提陶,更是在濱河造成了極大的恐慌烫沙,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,273評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件搁骑,死亡現(xiàn)場離奇詭異斧吐,居然都是意外死亡又固,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,349評論 3 398
  • 文/潘曉璐 我一進(jìn)店門煤率,熙熙樓的掌柜王于貴愁眉苦臉地迎上來仰冠,“玉大人,你說我怎么就攤上這事蝶糯⊙笾唬” “怎么了?”我有些...
    開封第一講書人閱讀 167,709評論 0 360
  • 文/不壞的土叔 我叫張陵昼捍,是天一觀的道長识虚。 經(jīng)常有香客問我,道長妒茬,這世上最難降的妖魔是什么担锤? 我笑而不...
    開封第一講書人閱讀 59,520評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮乍钻,結(jié)果婚禮上肛循,老公的妹妹穿的比我還像新娘。我一直安慰自己银择,他們只是感情好多糠,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,515評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著浩考,像睡著了一般夹孔。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上析孽,一...
    開封第一講書人閱讀 52,158評論 1 308
  • 那天搭伤,我揣著相機(jī)與錄音,去河邊找鬼袜瞬。 笑死闷畸,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的吞滞。 我是一名探鬼主播,決...
    沈念sama閱讀 40,755評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼盾沫,長吁一口氣:“原來是場噩夢啊……” “哼裁赠!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起赴精,我...
    開封第一講書人閱讀 39,660評論 0 276
  • 序言:老撾萬榮一對情侶失蹤佩捞,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后蕾哟,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體一忱,經(jīng)...
    沈念sama閱讀 46,203評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡莲蜘,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,287評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了帘营。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片票渠。...
    茶點(diǎn)故事閱讀 40,427評論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖芬迄,靈堂內(nèi)的尸體忽然破棺而出问顷,到底是詐尸還是另有隱情,我是刑警寧澤禀梳,帶...
    沈念sama閱讀 36,122評論 5 349
  • 正文 年R本政府宣布杜窄,位于F島的核電站,受9級特大地震影響算途,放射性物質(zhì)發(fā)生泄漏塞耕。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,801評論 3 333
  • 文/蒙蒙 一嘴瓤、第九天 我趴在偏房一處隱蔽的房頂上張望扫外。 院中可真熱鬧,春花似錦纱注、人聲如沸畏浆。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,272評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽刻获。三九已至,卻和暖如春瞎嬉,著一層夾襖步出監(jiān)牢的瞬間蝎毡,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評論 1 272
  • 我被黑心中介騙來泰國打工氧枣, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留沐兵,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,808評論 3 376
  • 正文 我出身青樓便监,卻偏偏與公主長得像扎谎,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子烧董,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,440評論 2 359

推薦閱讀更多精彩內(nèi)容