一、Why DDD?
在加入X公司後,開始了ASP.NET Core+Docker+Linux的技術實踐,也開始了微服務架構的實踐。在微服務的學習中,有一本微軟官方出品的《.NET微服務:容器化.NET應用架構指南》是我們學習的葵花寶典,縱觀微軟官方放出來的Demo專案的演變歷史(可以參見楊曉東《我眼中的ASP.NET Core微服務》一文):
(1)PetShop:WebForm 的示例程式。典型的三層架構風格的應用程式。
(2)MusicStore: 針對於 MVC3~5 框架和 EF 的一個示例程式。無明顯架構風格。
(3)eShop: 針對於 ASP.NET Core 的示例程式,它是一個 REST架構風格的應用程式。
分析其架構風格的轉變可以看出,現代應用程式架構已經從單一的傳統風格架構(N-Layered)轉向了多種混合風格架構(Mixed-Style),像最新的eShopOnWeb/Container專案就包含了以下多種架構風格:
我們可以看到,其中主要包括了以下兩種架構風格(雖然看起來好像有四種):
-
基於資料驅動的CRUD微服務 (比如上圖中Catalog Microservice和Basket Microservice)
-
基於DDD的微服務(比如上圖中的Ordering Microservice 訂單微服務)
目前,我所在的開發團隊仍然在使用第一種-基於資料驅動的CRUD微服務,而要面對的業務卻逐步變得複雜,已經強烈感到資料驅動的複雜度、不好維護度以及溝通成本,因此需要瞭解一下為複雜業務而生的DDD。不可否認,很多人是因為微服務才來瞭解 DDD 的(沒錯,說的就是我)。
來自ThoughtWorks的諮詢師王威說道:在聽說了微服務架構之後,人們覺得採用微服務架構會讓系統開發與運維管理變得簡單高效,同時實現的系統會更加合理,更加高可用、高效能,但是當他們實際去做微服務架構的時候,有不少人會發現自己做得並不好,沒法取得人們“吹捧”的那些效果,“就算用了微服務架構也不能解決他們的問題,反而帶來很多開發與運維上的負擔”。於是他們去諮詢、去找方法,最後發現其實是自己劃分微服務的方法出錯了,這個時候才知道人們在談論微服務的時候,其實都沒有講到一個點:應該用 DDD 的思想去指導微服務的實踐。
那麼,DDD又是什麼呢?
DDD 是一種在面向高度複雜的軟體系統時,關於如何去建模的方法論,“它的關鍵點是根據系統的複雜程度,建立合適的模型”。在一個系統中,沒有一個人能完全掌握系統的全貌,在多人參與的系統中,DDD 正是可以透過在不同角色之間進行協作,使參與者達成統一認知,對齊系統設計與程式實際所服務的業務領域。
摘自 ThoughtWorks資深諮詢師 Alberto Brandolini
從上圖中來看DDD 的一個生命週期大概是這樣的:在設計和實現一個系統的時候,這個系統所要處理問題的領域專家和開發人員以一套統一語言進行協作,共同完成該領域模型的構建,在這個過程中,業務架構和系統架構等問題都得到瞭解決,之後將領域模型中關於系統架構的主體對映為實現程式碼,完成系統的實現落地。而用什麼方式去做領域模型的構建,方法是多樣的,看具體選擇了。
這裡有3個要點,藉助專家之眼來看看:
首先,在 DDD 中,使用一個統一語言,可以直接將業務架構與系統架構系結,不需要進一步去翻譯,從而增強系統對業務的響應速度。
其次,DDD 關註的是要構建的系統中,關於所要解決的問題的業務、流程和資料等內容是如何工作的,在這些東西理清之後,DDD 去構建出一個模型,接著再去選擇具體的實現技術。DDD 強調的是解耦具體實現技術,所以它可以迅速梳理核心業務邏輯。
最後,DDD 並不是直接給你建議某一個系統架構,它的執行結果是呈現一個方案,可以從這個構建出的模型中決定你去用什麼技術來實現什麼樣的架構,進而來完成一個系統的設計。備選的各種技術只是像一個串列一樣擺在眼前,它要根據你的領域需求來選擇,比如“選擇採用微服務架構”。
二、精華筆記
–下麵考慮到閱讀體驗,將其分為兩個Part的導圖。
2.1 Part 1
2.2 Part 2
完整版思維導圖瀏覽地址:點此瀏覽ProcessOn大圖
三、後續學習
本次學習只是一個簡單的DDD的相關基礎理論學習,後續我會閱讀Scott Millett和Nick Tune編著的《領域驅動設計樣式、原理與實踐》一書進行深入學習,然後會研究經典DDD分層架構與eShopOnContainers示例專案中的簡化DDD微服務架構,最後也會總結一下要點分享出來。
最後感謝一下聖傑的文章,總結的太好啦!
參考資料
顏聖傑,《DDD理論學習系列文章》
Alberto Brandolini、王威,《不用DDD,那你的微服務可能都做錯了》
原文地址:
https://www.cnblogs.com/edisonchou/p/edc_ddd_foundation_study_notes.html