初探 Domain Storytelling

-與DDD的搭配及劃分邊界技巧
Sandy 2021/05/29
1
2
關於我
2020年開始接觸DDD,並擔任DDDTW志⼯;

任職於⾦融業資訊部⾨,擔任開發部⾨⼩組長,

並致⼒於在公司中推廣及應⽤DDD。
前半段回顧
• Domain Storytelling 是什麼?能帶來什麼好處?
• 圖⽰語⾔有哪些元素?
3
■ 讓⼈們彼此互相合作的建模技術(collaborative modeling technique)
■ ⽬的在於將業務知識轉化成業務應⽤系統
■ 將不同專業及背景的⼈們拉在⼀起,藉由敘述和視覺化領域故事,彼此互相學習
■ 帶來的好處包含:瞭解業務知識、建立統⼀語⾔、梳理業務需求...
■ 參與者 Actor
■ 領域活動物件 Work Objects
■ 領域活動⾏為 Activities
• 學習領域語⾔
⽤於接觸新的領域時,向領域專家學習和互動交流,適
⽤於 DDD 學習統⼀語⾔(ubiquitous language)。
• 劃分邊界
⽤於將⼀個⼤領域拆分成更⼩的單元時,例如拆分單體
架構中的模組、微服務設計等,適⽤於 DDD 中的
bounded context 或組織團隊。
• 程式建模
在程式建模過程中,DST可以幫助設計程式的類別及⽅
法,甚⾄在程式碼中直接使⽤業務語⾔。
與 DDD 搭配使⽤
後頁展開
4
圖片來源:https://leanpub.com/domainstorytelling
劃分邊界
應⽤時機
• 想要將單體架構拆分成更⼩的模組時
• 想要辨識( DDD 中的) Bounded Context
• 想要將開發⼈員拆分成為更⼩且有組織的團隊時
劃分原則
從領域專家的⾓度,找到彼此歸屬在⼀起(belongs together)的活動。
5
劃分邊界
舉電影院為例
• 顧客向售票員購票的流程為票務⼦領域。
• 顧客向⼩販部購買餐飲的流程為餐飲⼦領域。
• 顧客欣賞電影、播映⼈員播映電影的流程為播映⼦領
域。
• 顧客入場、與驗票員互動的流程為驗票⼦領域。
• 整個業務流程可拆分為 票務、餐飲、播映、驗票 四⼤
⼦領域。
票務 餐飲
播映
驗票
6
圖片來源:https://leanpub.com/domainstorytelling
劃分邊界
服務提供(Offering)
風險評估
舉汽⾞租賃為例
• 顧客與銷售⼈員互動,選⾞、簽約的過程歸納為服務提
供⼦領域。
• 風險⼈員計算風險及准駁合約歸納為風險評估⼦領域。
• 整個業務流程可拆分為 服務提供、風險評估、汽⾞管
理、⽀付 四⼤⼦領域。
⽀付
汽⾞
管理
7
圖片來源:https://leanpub.com/domainstorytelling
劃分邊界-拆分技巧
1. Activities that only involve one actor 只有⼀個參與者,獨⾃做了許多事
2. One-way information flow 單向資訊流
3. Different triggers 不同的觸發點
4. Activities supporting something that is not in the picture 不屬於這個領域故事的活動⾏為
5. Difference in language 同樣的事物有不同的名稱
6. Different use of the same thing 同樣的事物有不同⽤途
8
劃分邊界-拆分技巧
1. Activities that only involve one actor 只有⼀個參與者,獨⾃做了許多事
範例:汽⾞租賃業務的風險管理者。 範例:電影院的售票員。
9
圖片來源:https://leanpub.com/domainstorytelling
範例:在汽⾞租賃的例⼦中,sales person 將
contract 交給 risk manager 後,對 sales person 來
說,就不需再關⼼ contract 了。
劃分邊界-拆分技巧
2. One-way information flow 單向資訊流
參與者 A 將領域活動物件傳給參與者 B 後,沒有額外資
訊(直接或間接)再回到 A,A 也不會管 B 之後做了什麼。
10
範例:A 將物件交給 B 後,B 做了許多事,但都沒再
與 A 有互動。
圖片來源:https://leanpub.com/domainstorytelling
劃分邊界-拆分技巧
3. Different triggers 不同的觸發點
範例:在汽⾞租賃的案例中,顧客除了請求觸發offer
活動(request-based);顧客也會依⽇期觸發付款活動
(time-based)。
範例:在電影院中,顧客因要看電影發動購票流
程;並等待到進場時間到才進場。
依⽇期
觸發付款
依請求
觸發offer
11
隨時依需求
發動購票
等到進場時間
才進場驗票
圖片來源:https://leanpub.com/domainstorytelling
劃分邊界-拆分技巧
4. Activities supporting something that is not in the picture 不屬於這個領域故事的活動⾏為
範例:在汽⾞租賃的例⼦中,風險管理者會建立風險報告,但這份報告在領域故事中並沒有被其他⾓⾊使
⽤,與此次領域故事無關,可能歸屬於其他⼦領域。
12
劃分邊界-拆分技巧
5. Difference in language 語⾔差異
同樣的物件被不同的⾓⾊賦予不同的名稱,
或是同樣的名稱有不同的意義。
範例⼀:顧客向銀⾏申請信⽤卡或貸款需提出財⼒證明,對顧客來說名為「稅單」、「不動產所有權狀」
等的物件,則被銀⾏視為「財⼒證明」之物件。
13
劃分邊界-拆分技巧
6. Different use of the same thing 同樣的事物有不同⽤途
範例:在汽⾞租賃的例⼦中, 「合約」這個物件,被顧客「簽署」,屬於法律⾏為、建立關係;
被風險管理者「准駁」,擁有財務意涵、⽤於減輕財務風險。
14
圖片來源:https://leanpub.com/domainstorytelling
劃分邊界-拆分技巧
1. Activities that only involve one actor 只有⼀個參與者,獨⾃做了許多事
2. One-way information flow 單向資訊流
3. Different triggers 不同的觸發點
4. Activities supporting something that is not in the picture 不屬於這個領域故事的活動⾏為
5. Difference in language 同樣的事物有不同的名稱
6. Different use of the same thing 同樣的事物有不同⽤途
15
劃分原則:從領域專家的⾓度,找到彼此歸屬在⼀起(belongs together)的活動。
16
回到外送平台的例⼦,你會怎麼拆分⼦領域呢?
17
1. 顧客與外送平台的互動,可以視為歸屬在⼀起的活動。
2. 單向資訊流:顧客在外送平台上建立訂單及付款後,只要
坐等餐點送達,不需關⼼後續發⽣的事情。
18
不同觸發點:外送平台
1. 因為顧客下單觸發通知餐廳備餐
2. 因為餐廳備餐完成通知外送師取餐路線
3. 因爲外送師回報已取餐提供送餐路線。
19
語⾔差異:同樣的詞彙「餐點」代表不同的東⻄。
20
同樣的事物有不同⽤途:「訂單」對不同的參與者
(顧客、餐廳、外送師)有不同的⽤途。
21
這是我們的答案,和你的⼀樣嗎?
⼩提醒:業務流程和劃分邊界沒有標準答案,我們也不是外送平台的領域專家,
重點是從業務⾓度和邏輯思考找出適合的⼦領域。

Finding Boundaries with Domain Storytelling