Thursday, March 25, 2021

[Domain-Driven Design] 用 Ubiquitous Language 溝通

現代軟體的複雜特性,沒有一個人或是團隊可以單獨掌握所有的知識細節,甚至連領域專家的理解都可能有所缺漏。

為了要盡可能獲取知識的全貌,我們會將溝通所得到的知識提煉出來達成共識後,建立 Ubiquitous Language (通用語言),減少溝通的成本。


(開發與商業團隊交流後,發現其實系統需要的是訂單、商品與會員管理三個功能,並且規定大家要用 Ubiquitous Language 互相溝通)

整個過程可以參考這張圖:


至於該怎麼與領域專家做到有效溝通並建立 Ubiquitous Language ,會在之後的章節介紹 Event Storming 事件風暴。

兩大設計模式類別

與領域專家討論出 Ubiquitous Language 後,就可以開始套用 DDD 的各種設計模式,而這些模式大致上可以分為兩類:Strategic Design (戰略設計) 與 Tactical Design (戰術設計)。

  • Strategic Design 戰略設計:利用與領域專家溝通的結果,拆分問題成數個子領域後,定義解決方案(系統)的邊界與關係。
  • Tactical Design 戰術設計:又稱 Model-Driven Design ,在 Strategic Design 的一個個解決方案邊界內,用一系列設計模式寫程式實踐業務邏輯。

簡單來說, Strategic Design 打嘴砲設計大架構與方向, Tactical Design 捲起袖口開始寫程式。

以上兩個模式就是之後本系列的主軸

[Domain-Driven Design]-Introduction

程式設計的重點並不在於使用哪個框架技術或優化幾個百分比,而是在於是否能

忠實解決業務的需求 

Eric Evans 發明了領域驅動設計 (Domain-Driven Design ,之後簡稱 DDD) ,提倡開發人員也需要與領域專家合作以獲取足夠的業務知識 (business knowledge),接著將領域知識與業務邏輯注入進程式碼模型之中,達成「程式即設計、設計即程式」的境界

運用了這套模式

一來程式碼功能一目瞭然

二來可以有效保護我們的業務邏輯不被竄改,甚至可以適應未來業務邏輯的變化與成長

 

DDD 最大的價值之一就是把將商業領域的知識映照到程式碼中,解放「程式歸程式,業務歸業務」的傳統思維,在過程中甚至可以打破商業團隊與工程團隊間的藩籬,甚至會讓人感覺到:

開發其實是一場學習的過程,程式碼只是過程的副產物。

DDD 是什麼

 介紹 DDD 是什麼之前,我們先定義領域 (Domain) 是什麼。廣泛來說, domain (knowledge) 是指「一塊知識的範圍」。實務上,就是指「你工作上所需的一切知識集合」,包含「問題」以及「解決方案」。

由此可見, DDD 是一種基於領域知識來解決複雜業務問題的軟體開發方法論。

它有以下三個重點:

跟領域專家 (domain expert) 密切合作來定義出 domain 的範圍及相關解決的方案。

切分領域出數個子領域,並專注在核心子領域。

透過一系列設計模式,將領域知識注入進程式模型 (model) 中。 

https://ithelp.ithome.com.tw/articles/10216792

http://teddy-chen-tw.blogspot.com/2019/06/5aggregate.html

複雜軟件設計之道-領域驅動設計

1. 領域驅動設計基礎

2. 領域驅動戰略設計

3. 聚合設計

4. 實體和值對象

5. CQRS 架構

6. 事件溯源

7.  貨物運輸系統


Event Storming

Event Storming 概覽

Event Storming 是一個透過高度互動的方式,將企業或系統的商業流程視覺化,最終協助建立軟體模型的工作坊。簡單來說就是探索功能、找出盲點、建立共識。

跑完後,與會者們都將會獲得:

  • 對於商業流程的共同理解,包含名詞使用、責任範圍、使用者體驗等。
  • 一份整體流程的概覽圖 (Big Picture),事後也可以數位化製成文件。
  • 可以找出商業流程中的核心價值、風險與機會。
  • 一個導入 DDD 的好起點。

適合的對象

如果你的工作流程出現以下症狀,請儘早服用 Event Storming:

  • 規格書的知識瑣碎、難以理解、沒有明確架構。
  • 討論時常陷入細節的爭論,或是過多的技術詞彙讓主題失焦。
  • 開發到一半還在理解功能在幹嘛。
  • 等到上線了才發現一堆 Bug。

Event Storming 應用場景

使用的場景點從巨觀到微觀:


橘色(正方形 76*76):Event 事件 (過去式表示)

說故事的方式,是否順


Event Storming Part 1 - 簡介與事前準備 

Event Storming Part 2 - 風暴展開

Event Storming Part 3 - 軟體設計

Event Storming Part 4 - 可以做的更好

n8n index

 【n8n免費本地端部署】Windows版|程式安裝x指令大補帖  【一鍵安裝 n8n】圖文教學,獲得無限額度自動化工具&限時免費升級企業版功能