什麼是DDD領域驅動設計的統一語言?
統一語言也稱為無處不在的語言、通用語言、泛在語言,無處不在的語言是在有界的上下文中建模的,在其中標識表達了業務領域的術語和概念,並且不應該有歧義。
無處不在的語言是Eric Evans在“域驅動設計 - 處理軟體核心中的複雜性”中使用的術語,用於構建由團隊,開發人員,領域專家和其他參與者共享的語言。
無論您的軟體是如何設計的,都需要在分隔的上下文中反映清晰且建模的泛在語言。
要產生清晰的無所不在的語言,您必須瞭解更多業務。
無所不在的語言的特徵
- 無處不在的語言必須在領域模型中表達。
- 無處不在的語言統一了專案團隊的員工表達語言。
- 無所不在的語言消除了領域專家的不準確和矛盾。
- 無所不在的語言不是領域專家強加的業務語言。
- 無處不在的語言不是行業中使用的語言。
- 無處不在的語言隨著時間的推移而發展,它並不是完全在一次會議中定義的。
- 應該拒絕不屬於泛在語言的概念。
常見問題
我想強調我們應該避免的想法:
- 由於缺少通用語言導致“翻譯”,這對域模型不利,並導致錯誤的域模型的建立。
- 由於缺乏共同語言,團隊成員使用不同的術語而沒有意識到。
- 即使存在,也不使用普遍存在的語言進行通訊。
- 由技術團隊建立用於構建域模型的抽象,域專家無法理解。
- 技術團隊無視領域專家參與領域模型,認為對領域專家而言過於抽象。但域專家必須參與,因為誰可以驗證構建的域模型?
如何開發無所不在的語言?
你可能會問自己:但是如何開發無所不在的語言?有什麼方法?誰參與了?有什麼過程?
第一點是即使是領域專家也可能彼此不同意,只有透過公開討論,分析現有文件,詞典,標準等,我們才能提出更好的語言。
- 畫:在白板上表達您的業務領域,不要擔心它們是否是正式設計。
- 建立詞彙表:定義開發所有術語的詞彙表。
- 使用事件風暴:領域專家和開發人員可以使用Event Storming實現業務流程學習的快速迴圈,從而促進泛在語言的發展。
- 檢視並更新:準備好以敏捷方式檢視和更新生成的內容。
這些只是開發泛在語言的第一步。
沃恩弗農說:
程式碼是無所不在的語言的持久表達,準備放棄難以及時更新的圖紙,術語表和其他文件。
程式碼需要表達無所不在的語言
想象一下,您正在開發電子商務系統,產品所有者提出以下要求:
“系統必須允許更改客戶的電子郵件。”
簡單,不是嗎?但是你會如何在程式碼中表示這一點?
以下是一個實施示例:
public class People : Entity { public string Name { get; set; } public string Email { get; set; } ... public void Update(string name, string email, ...) { if(!string.IsNullOrEmpty(name)) { Name = name; } if(!string.IsNullOrEmpty(email)) { Email = email; } ... } } |
你怎麼看待這段程式碼?你認為它真的反映了無所不在的語言嗎?
請記住,聚合,值物件,領域服務,儲存庫,命令,事件等需要表達泛在語言。
請參閱下面反映泛在語言的程式碼示例:
public class Client : Entity { public string Name { get; private set; } public string Email { get; private set; } ... public void ChangeEmail(string email) { Email = email; } } |
相關文章
- 什麼是領域驅動設計(DDD)?- mathias
- 什麼是DDD領域驅動設計的戰略設計?
- 什麼是DDD領域驅動設計的戰術設計?
- DDD領域驅動設計:領域事件事件
- 領域驅動設計的DDD與ddd - nick
- DDD領域驅動設計pdf
- 領域驅動設計(DDD)實踐之路(一)
- DDD-領域驅動設計示例
- 淺談DDD(領域驅動設計)
- 淺談 DDD 領域驅動設計
- DDD領域驅動設計:倉儲
- 領域驅動設計(DDD)入門&概要
- DDD-領域驅動設計簡談
- dayatang/dddlib:DDD領域驅動設計庫
- 領域驅動設計 (DDD) 簡介 - jannikwempe
- 領域驅動設計中的聚合是什麼? - James Hickey
- 聊一聊中臺和DDD(領域驅動設計)
- 領域驅動設計(DDD)高手養成記
- 【DDD】《如何運用領域驅動設計》彙總
- 一張圖解釋DDD領域驅動設計的戰術概念圖解
- 重讀領域驅動設計——如何說好一門通用語言
- 領域驅動設計(DDD)實踐之路(二):事件驅動與CQRS事件
- .NET領域驅動設計—看DDD是如何運用設計模式顛覆傳統架構設計模式架構
- 領域驅動設計(DDD)中模型的重要性 - Jeronimo模型
- 基於函數語言程式設計的領域驅動設計 - Scott Wlaschin函數程式設計
- 不容錯過!什麼是領域驅動設計?為什麼落地這麼難?
- 去哪兒網領域驅動設計(DDD)實踐之路
- 為什麼要進行領域驅動設計? - Vincent
- 領域驅動設計DDD不具備大規模落地的條件!
- 領域驅動模型DDD(一)——服務拆分策略模型
- 領域本體與DDD的UL語言
- DDD領域驅動設計總結和C#程式碼示例C#
- 領域驅動設計DDD和CQRS架構模式落地實踐架構模式
- 領域驅動設計示例
- MasaFramework -- 領域驅動設計Framework
- 理解領域驅動設計
- ABP與DDD領域驅動關係
- JavaScript中的領域驅動設計JavaScript