DDD专家张逸:构建领域驱动设计知识体系
張逸
讀完需要
5
分鐘速讀僅需 2 分鐘
領域驅動設計專家,曾就職于 ThoughtWorks,作為 Lead Consultant 為客戶提供架構設計、大數據分析、持續交付、代碼質量、敏捷管理等咨詢服務。著譯作包括《軟件設計精要與模式》、《WCF 服務編程》、《Java 設計模式》、《恰如其分的軟件架構》、《人件》等。新書《解構領域驅動設計》即將完稿。
本次演講是張逸老師創作 GitChat 課程「領域驅動戰略設計實踐」和「領域驅動戰術設計實踐」這兩年來,隨著對領域驅動設計的深度理解,結合自身項目經驗總結的領域驅動設計知識體系。
本次演講內容分為四個部分:
領域驅動設計的歷史回顧
對領域驅動設計的新定位
領域驅動設計參考過程模型
領域驅動設計能力評估模型
1
? ?
領域驅動設計的歷史回顧
從 2004 年 Eric Evans 的經典著作《領域驅動設計》出版開始,在這十五年間,我個人認為有四個重要的里程碑值得重視。
里程碑之一:領域驅動設計的誕生
里程碑之二:領域事件的引入
它的重要意義在于拓寬了領域驅動設計的建模范式,引入了以“事件”和“函數”為核心的新的領域驅動設計模式,如 Event Store、Event Sourcing、Pure Function 等:
架構模式也發生了變化:
里程碑之三:微服務的引入
毫無疑問,微服務概念以及該架構模式的產生與發展,對領域驅動設計產生了深遠的影響。它的引入對企業應用系統的設計與開發帶來了各方面的影響。
首先是設計理念的改變。傳統的數據模型驅動設計并不適合微服務架構。例如,那種以數據庫 SQL 或存儲過程操作數據的方式,在微服務架構下已經不具備優勢:
其次,領域驅動設計引入的限界上下文邊界與聚合邊界更適合微服務架構:
通過防腐層(ACL)與開放主機服務(OHS)維護好限界上下文的邊界,有利于單體架構向微服務架構的遷移:
領域驅動設計強調領域模型與數據模型的分離,在從單庫單表的數據結構遷移到多庫多表時,領域模型受到的影響較小,同樣有利于單體架構到微服務架構的遷移。
在 2017 年的 DDD 中國峰會,我對肖然笑稱是“微服務拯救了領域驅動設計”,但這個說法其實比較過分,因為領域驅動設計并沒有岌岌可危,只是并未成為國內軟件開發的主流而已,因而我改為一個更加溫柔的說法:微服務讓領域驅動設計煥發了青春。
但是,到了 2019 年的今天,我卻要改變這一說法:不是微服務讓領域驅動設計煥發青春,而是微服務“愛上了”領域驅動設計,二者其實是天作之合。
里程碑之四:中臺戰略的引入
ThoughtWorks 的王健將微服務定義為:企業級能力復用平臺。我很認同這一定義,如果仔細分析這九個字的定義,也可以從領域驅動設計中找到映射。
首先,領域驅動設計中問題空間的子領域和解決方案空間的限界上下文就體現了企業級能力:
其次,領域驅動設計強調將領域層獨立出來,即可形成對領域模型的復用:
領域驅動設計的四重邊界與整潔架構思想的遵循,可以幫助我們更好地完成平臺的沉淀:
中臺戰略(Zhongtai Strategy)是否能夠更好地與領域驅動設計結合,或許答案還未可知,但我們可以對其進行探索。
2
? ?
對領域驅動設計的新定位
我認為領域驅動設計從最初的一種技術體系,到現在已經發展成了一種設計哲學:
為此,我建立了領域驅動設計魔方,分別從 X、Y、Z 三個維度對領域驅動設計進行了梳理:
我基于 Y 軸劃分的宏觀層次、微觀層次與納米層次分別介紹了領域驅動設計魔方:
在領域驅動設計魔方中,我引入了業務架構、系統上下文、事件風暴、整潔架構、RAID 風暴、RUP 4+1 視圖、康威定律、精益需求管理、敏捷過程管理、場景驅動設計、測試驅動開發和測試戰略。這些內容在 PPT 中都有介紹,這里就不再贅述。
3
? ?
領域驅動設計參考過程模型
固化領域驅動設計的過程,提供簡單有效的實踐方法,建立具有目的性和可操作性的研發過程。
在全局分析階段,參考過程模型的實踐包括:
在戰略設計階段,參考過程模型的實踐包括:
如果當前限界上下文屬于核心子領域,則應該為該限界上下文開展領域模型驅動設計,這一階段的參考過程模型包括:
4
? ?
領域驅動設計能力評估模型
借助領域驅動設計魔方與領域驅動設計參考過程模型引入的各種方法與模式,我建立了一套領域驅動設計能力評估模型。
領域驅動設計能力評估模型(Domain-driven design Capability Assesment Model, DCAM)是我個人對領域驅動設計經驗的一個提煉,可以通過它指導團隊進行能力的培養和提升。
DCAM 并非一個標準或一套認證體系,更非事先制定和強制執行的評估框架。建立這套模型的目的僅僅是為了更好地實施領域驅動設計,它是一個能夠不斷演化的評估框架。
該能力評估模型針對的能力維度包括:
敏捷迭代能力
領域建模能力
架構設計能力
整潔編碼能力
敏捷迭代能力
領域建模能力
架構設計能力
整潔代碼能力
領域驅動設計的落地取決于一個成熟的領域驅動設計團隊。利用 DCAM 對團隊進行評估,在發現團隊成員的能力短板后進行針對性的培訓,一旦提升了整個團隊的成熟度,在領域驅動設計的精髓指導下,距離領域驅動設計的成功就不遠了!
- EOF -
微服務架構~BFF和網關是如何演化出來的2020-10-06
這十年,阿里開發者畢玄的日常2020-10-05
天弘基金首席架構師李鑫:微服務接口限流的算法及架構實現2020-10-04
? ?END ? ?? #架構師必備# 點分享點點贊點在看總結
以上是生活随笔為你收集整理的DDD专家张逸:构建领域驱动设计知识体系的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java版计算器
- 下一篇: java打地鼠游戏-有背景音乐有图