構建領域驅動設計知識體系

  • 2019 年 12 月 5 日
  • 筆記

本次演講是我創作GitChat課程「領域驅動戰略設計實踐」和「領域驅動戰術設計實踐」這兩年來,隨着對領域驅動設計的深度理解,結合自身項目經驗總結的領域驅動設計知識體系。

本次演講內容分為四個部分:

  • 領域驅動設計的歷史回顧
  • 對領域驅動設計的新定位
  • 領域驅動設計參考過程模型
  • 領域驅動設計能力評估模型

領域驅動設計的歷史回顧

從2004年Eric Evans的經典著作《領域驅動設計》出版開始,在這十五年間,我個人認為有四個重要的里程碑值得重視。

里程碑之一:領域驅動設計的誕生

里程碑之二:領域事件的引入

它的重要意義在於拓寬了領域驅動設計的建模範式,引入了以「事件」和「函數」為核心的新的領域驅動設計模式,如Event Store、Event Sourcing、Pure Function等:

架構模式也發生了變化:

里程碑之三:微服務的引入

毫無疑問,微服務概念以及該架構模式的產生與發展,對領域驅動設計產生了深遠的影響。它的引入對企業應用系統的設計與開發帶來了各方面的影響。

首先是設計理念的改變。傳統的數據模型驅動設計並不適合微服務架構。例如,那種以數據庫SQL或存儲過程操作數據的方式,在微服務架構下已經不具備優勢:

其次,領域驅動設計引入的限界上下文邊界與聚合邊界更適合微服務架構:

通過防腐層(ACL)與開放主機服務(OHS)維護好限界上下文的邊界,有利於單體架構向微服務架構的遷移:

領域驅動設計強調領域模型與數據模型的分離,在從單庫單表的數據結構遷移到多庫多表時,領域模型受到的影響較小,同樣有利於單體架構到微服務架構的遷移。

在2017年的DDD中國峰會,我對肖然笑稱是「微服務拯救了領域驅動設計」,但這個說法其實比較過分,因為領域驅動設計並沒有岌岌可危,只是並未成為國內軟件開發的主流而已,因而我改為一個更加溫柔的說法:微服務讓領域驅動設計煥發了青春。

但是,到了2019年的今天,我卻要改變這一說法:不是微服務讓領域驅動設計煥發青春,而是微服務「愛上了」領域驅動設計,二者其實是天作之合

里程碑之四:中台戰略的引入

ThoughtWorks的王健將微服務定義為:企業級能力復用平台。我很認同這一定義,如果仔細分析這九個字的定義,也可以從領域驅動設計中找到映射。

首先,領域驅動設計中問題空間的子領域和解決方案空間的限界上下文就體現了企業級能力:

其次,領域驅動設計強調將領域層獨立出來,即可形成對領域模型的復用:

領域驅動設計的四重邊界與整潔架構思想的遵循,可以幫助我們更好地完成平台的沉澱:

中台戰略(Zhongtai Strategy)是否能夠更好地與領域驅動設計結合,或許答案還未可知,但我們可以對其進行探索。

對領域驅動設計的新定位

我認為領域驅動設計從最初的一種技術體系,到現在已經發展成了一種設計哲學:

為此,我建立了領域驅動設計魔方,分別從X、Y、Z三個維度對領域驅動設計進行了梳理:

我基於Y軸劃分的宏觀層次、微觀層次與納米層次分別介紹了領域驅動設計魔方

在領域驅動設計魔方中,我引入了業務架構、系統上下文、事件風暴、整潔架構、RAID風暴、RUP 4+1視圖、康威定律、精益需求管理、敏捷過程管理、場景驅動設計、測試驅動開發和測試戰略。這些內容在PPT中都有介紹,這裡就不再贅述。

領域驅動設計參考過程模型

固化領域驅動設計的過程,提供簡單有效的實踐方法,建立具有目的性和可操作性的研發過程。

在全局分析階段,參考過程模型的實踐包括:

在戰略設計階段,參考過程模型的實踐包括:

如果當前限界上下文屬於核心子領域,則應該為該限界上下文開展領域模型驅動設計,這一階段的參考過程模型包括:

領域驅動設計能力評估模型

藉助領域驅動設計魔方與領域驅動設計參考過程模型引入的各種方法與模式,我建立了一套領域驅動設計能力評估模型。

領域驅動設計能力評估模型(Domain-driven design Capability Assesment Model, DCAM)是我個人對領域驅動設計經驗的一個提煉,可以通過它指導團隊進行能力的培養和提升。

DCAM並非一個標準或一套認證體系,更非事先制定和強制執行的評估框架。建立這套模型的目的僅僅是為了更好地實施領域驅動設計,它是一個能夠不斷演化的評估框架。

該能力評估模型針對的能力維度包括:

  • 敏捷迭代能力
  • 領域建模能力
  • 架構設計能力
  • 整潔編碼能力

敏捷迭代能力

領域建模能力

架構設計能力

整潔代碼能力

領域驅動設計的落地取決於一個成熟的領域驅動設計團隊。利用DCAM對團隊進行評估,在發現團隊成員的能力短板後進行針對性的培訓,一旦提升了整個團隊的成熟度,在領域驅動設計的精髓指導下,距離領域驅動設計的成功就不遠了!

感謝我的老東家ThoughtWorks以及DDD中國峰會給我這樣一個機會進行一次主題演講,也感謝GitChat「逼迫」我不斷創作,完成了近100章數十萬字的《領域驅動設計實踐》課程的寫作。