天天看點

雲原生時代領域驅動設計(DDD)的價值——從《沒有銀彈》說起

“軟體開發需要面對本質困難和附屬困難。雲原生、DevOps實踐大幅降低了附屬困難,使得架構師可以全力聚焦于業務複雜性,而DDD恰是管理業務複雜性的有效方法。”

1986年,軟體工程巨匠Frederick Brooks撰寫了一篇著名的論文《沒有銀彈》。他在文章的開篇寫道:

在未來的10年以内,不存在任何單一的方法和技術,能夠10倍以上的提高軟體開發的生産力。

這個論斷在當時就引發了巨大的争議。至今,《沒有銀彈》仍然是一個被經常拿出來讨論的話題。不過,這篇論文的真正價值遠不限于此,繼續讀下去,就會發現,。停留在是否存在10倍以上生産率的讨論是不夠的。真正值得關心的,是Brooks對原因的論斷。我把其中的重要觀點概括如下:

  1. 軟體開發的困難有兩類,一類是本質(Essential)困難,一類是附屬性(Accidental)困難。
  2. 本質困難是和軟體的本質緊密聯系在一起的,是以這類困難無法通過工具或者語言等加以解決。例如,軟體解決的問題是現實世界的問題,如果現實世界的問題本來就是複雜的,那麼無論任何工具,都不可能消除這種複雜性。
  3. 附屬性困難是和我們采取的工具或者方法相關的。例如,軟體需要被通過某種語言實作,軟體需要被編譯、被部署,軟體可能被實作為缺陷,這些都和具體的實作方法相關。這一類困難,可以通過工具、方法和技術的提升得以改善。
  4. 本質困難包括軟體的複雜性,不可見性、可變更性和符合性(指軟體開發還需要遵從諸如法律法規、外部系統等不受主觀意志決定的因素)

作為一名在軟體開發行業工作了20年的架構師,《沒有銀彈》關于本質困難和附屬性困難的論述給了我巨大啟發。多年以來,我一直都把“管理本質困難、消除附屬困難”作為軟體開發活動的座右銘。特别有意思的是,最近我發現,作為一個主要工作在業務系統上的架構師,在雲原生漸成趨勢的時候,架構師的職責已然發生了改變。而這個變化,恰恰和“管理本質困難、消除附屬困難”密切相關。

業務架構當然也是架構師的重要職責。業務和技術已經深度融合,業務對響應速度的要求和開發品質的要求越來越高,同時在雲原生時代,服務化幾乎成為必然選擇。而無論是業務響應能力、開發品質和服務化,都和業務規劃能力密切相關。這不就是最重要的“管理本質困難”的方面嘛!

領域驅動設計,雖然Eric Evans的同名書籍寫于2004年,多年以來,在技術社群也有較大影響。但是為什麼最近幾年熱度突然大幅上升,變得特别受關注呢?這是因為,我們的業務終于越變越複雜,到了如果沒有恰當的方法,就不能很好的管理的地步——這也恰恰暗合了DDD一書的副标題“軟體核心複雜性應對之道“。微服務和雲原生在服務方面的劃分等,也是關鍵的助推因素。在今天的業務環境下,能更好地利用好雲原生基礎設施,更好地進行業務規劃、高效高質地分析和管理領域模型,用領域模型指導架構設計和開發實踐,是雲原生時代架構師的重要技能。

這次雲效和阿裡雲開發者學院聯合推出的《ALPD雲架構師系列——領域驅動設計》課程也正是圍繞着這個主題展開。

ALPD全稱Advanced Lean product development,它是阿裡雲雲效團隊提出的雲原生時代的研發新範式,它整合了技術、工程、協作、創新4類實踐,并提供高效解決方案。

雲原生時代領域驅動設計(DDD)的價值——從《沒有銀彈》說起

ALPD——雲原生時代研發新範式

雲原生時代領域驅動設計(DDD)的價值——從《沒有銀彈》說起

上面2幅圖分别是ALPD方法和支撐體系圖,我們希望ALPD及其解決方案可以幫助企業和開發者,實作10倍效能提升——10倍的響應速度,10倍的過程品質,10倍的有效價值傳遞。

在本次課程中,我們将為大家帶來 ALPD方法體系中的領域驅動的架構和實踐 部分的内容。

能通過這一次的對外整理,将知識和經驗分享給社群開發者小夥伴,也是非常開心的事情。

在課程整理中,我們把課程分成了如下章節:

01|領域模型的本質是業務認知

02|案例分析:高品質領域模型提升業務靈活性

03|高品質領域模型源自持續演進

04|案例分析:梳理業務概念,發現領域模型

05|從模型到代碼:領域驅動設計的構造塊

06|聚合:保證業務完整性的單元

07|領域驅動設計的分層模型和代碼組織

08|核心域、通用域和支撐域

09|基于業務能力和業務場景拆分子域

10|守護領域邊界,建構自治服務

11|限界上下文映射的模式

12|使用微服務建構領域資産

其中每講都保持了15分鐘左右的篇幅,以聚焦于一個比較内聚的主題。

  • 1-4講,讨論領域模型的一個基礎概念,包括什麼是領域模型?為什麼要關心領域模型?如何進行基本的領域模組化?
  • 5-7講,主要關心領域模型為中心的軟體實作,具體對應于領域驅動設計的戰術模式,例如實體對象、值對象,領域服務、領域事件構造塊及聚合、資源庫和工廠這些跟業務完整性密切相關的部分。
  • 8-12講,關心領域模型為中心的架構設計,具體對應于領域驅動設計的戰略模式,比如說子域、限界上下文、限界上下文映射等方面的話題。最後的12講,我們把微服務跟領域資産之間的關系也做了讨論,微服務是目前一個重要話題,如果對領域驅動設計關注不足,也會影響到微服務和雲原生的實施。

在整個課程中,沒有晦澀難懂的概念,我更希望能通過簡明的案例讓學員輕松了解領域驅動設計的核心思想和關鍵實踐。希望你也能通過學習這個課程,可以從本質出發,更好地了解DDD并付諸實際項目實施。

點選下方圖檔或文末連結,加入《雲架構師系列課程——DDD架構實戰》的學習之路吧!

雲原生時代領域驅動設計(DDD)的價值——從《沒有銀彈》說起

當然,領域模組化和領域驅動設計仍然是需要長期刻意練習的技能,課程中的内容也還隻是抛磚引玉,在後續的實際工作中希望你能持續應用和提升,不斷精進,成為雲原生時代的卓越架構師!

了解更多雲架構師課程請點選:

https://developer.aliyun.com/course/2360

本文作者:張剛——阿裡雲雲效資深技術專家,ALPD方法學核心成員

繼續閱讀