天天看點

聊聊國内IT圈的一門“隐學”

"IT有得聊”是機械工業出版社旗下IT專業資訊和服務平台,緻力于幫助讀者在廣義的IT領域裡,掌握更專業、實用的知識與技能,快速提升職場競争力。

導語:領域驅動設計是近幾年燃起的一個熱點,單從其圖書排名來看,在某東計算機與網際網路類,由去年的100多名,逐漸上升到現在經常在50名以内,而關于它的文章和教育訓練課程也數不勝數。它不是一門程式設計技術,而是起于某種軟體系統設計思想,落地于一套實施方法,與軟體設計相關,是值得軟體系統設計人員、軟體産品經理、軟體開發人員花時間去研究的。

聊聊國内IT圈的一門“隐學”

領域驅動設計的源起

領域驅動設計(Domain-DrivenDesign,DDD)一詞源于Eric Evans在2004年出版的圖書。但早在該書出版前,一些軟體設計人員就已經認識到了領域(如銀行業務、電商、物流、醫療等不同的領域)模組化和設計的重要性。具有一定軟體系統設計經驗的相關人員,對這一點往往都有所感觸。

好的思想落地時往往會發展出一套實施方法,Eric Evans通過自身10年的複雜系統設計經驗,總結出一個領域驅動設計(以下簡稱DDD)的實施架構,以及一個統一的詞彙庫,軟體系統設計與開發人員可以利用這個架構來系統性地應用DDD。

領域驅動設計的發展

自從Eric Evans的DDD書籍出版以後,湧現出很多其他書籍和文章擴充了其中的觀點,人們建立了各種新的方法來應用這些原則,各種線上課程與會議遍布歐洲、亞洲和北美等世界各地。Evans本人也認為:DDD社群需要大家共同發展。

DDD過去十多年中主要有三個階段:

● Eric Evans的理論原則建立和普及階段;

● 引入領域事件、事件溯源階段;

● 微服務架構的提出階段

由于DDD提出的有界上下文已經将業務的邊界劃厘清楚,是以,微服務的實作就非常順利成章了。同時,在人們不斷豐富DDD的實作技術以後,突然回首才發現,DDD中的戰略模式需要更多的關注,是以,事件風暴等有關組織管理等方面的新事物開始出現。

随着國内資訊化程序的快速推進,軟體系統日益複雜,微服務設計的應用熱度高漲,DDD從沉寂中崛起,受到行業内的廣泛關注與讨論,但其最佳實踐還在探索之中。

領域驅動設計的基本思路

這裡簡單說一下DDD的基本思路。DDD是專門解決複雜性的方法論。當需求規模比較大時,需求内部可能會發生沖突,有些沖突隐藏得非常深,可能通過代碼實踐才會發現,但是這種代碼試錯的代價非常高。而領域驅動,就可以讓一些有豐富領域知識和邏輯思考能力的人通過頭腦風暴等發現系統的複雜核心所在。這個過程的實施在DDD的發展過程中形成了一套比較有效的方法。

問題空間的複雜性是天然存在的,一個大型系統肯定要比小型系統複雜得多。DDD關注的重點就是如何将複雜的問題空間通過邏輯分析解析出來,從原來的混亂無序變得有條理、有層次,互相隔離、松耦合,就能分派不同的團隊專門處理各個問題的子域或有界上下文,分而治之。

領域驅動設計的知識架構

DDD共有兩個部分:戰略設計和戰術設計。戰略設計也可了解為政策設計,是從宏觀角度着眼于領域的分析設計,屬于系統分析階段,注重如何從有界上下文中尋找領域模型,戰略模式由有界上下文、無所不在的語言和上下文映射組成;而戰術設計屬于設計代碼階段,使用聚合、實體、值對象等對象類型概念表達領域模型。

下圖以闆橋老師(解道網站創辦者和版主,關注DDD十餘年。紮根軟體行業30 年,首個國内 Java 開源架構項目的設計者,持續跟蹤和傳播國際最新軟體架構思想和設計技術,緻敬!)新著圖書《複雜軟體設計之道:領域驅動設計全面解析與實戰》中的大綱為基礎,展示DDD的知識架構。

聊聊國内IT圈的一門“隐學”

一種設計方法不一定完全适合某個系統,或某個人/團隊,但好的設計方法一定能給人以新的啟發,讓設計人員在思想碰撞中不斷地思考與進步,将各種方法融入自己的知識系統之中,使用時靈活取舍,找到自身的設計之道。DDD就是這樣一種值得去探索的方法。

為了助力DDD在國内的探索與實踐,機械工業出版社特别邀請闆橋老師總結了發展十多年後的DDD,編寫出版《複雜軟體設計之道:領域驅動設計全面解析與實戰》。

為讀者提供更加清晰的DDD知識脈絡

各個擊破、詳細解析

當當計算機/網絡新書榜第13名

聊聊國内IT圈的一門“隐學”

作者:解道網闆橋/banq編著 

關鍵詞:領域驅動設計 DDD 微服務 CQRS 軟體架構  軟體系統設計

适合人群:軟體産品經理、領域專家、軟體設計開發相關從業人員

本書前6章全面解析了DDD的分析方法和技術架構,包括領域驅動設計基礎、領域驅動戰略設計(有界上下文和統一語言)、聚合設計、實體和值對象、CQRS架構和事件溯源,第7章使用經典的貨物運輸系統案例進行了完整、詳細的綜合示範。

本書同時引入了DDD的最新發展成果,如事件風暴模組化,并以此模組化方式替代傳統的DDD模組化方式講解了多個案例。還涉及大量軟體系統實作相關的技術和架構,讀者在學習DDD的同時,也可以掌握這些技術、架構在DDD實作中的靈活應用。

另外,每個概念或方法的講解過程都穿插了具體執行個體,以友善讀者結合執行個體進行學習;第2~7章每章最後都有總結與拓展,将本章涉及的案例和知識進行總結,并引入國際DDD專家的心得經驗,試圖告訴讀者一條DDD實戰中行之有效的途徑。

繼續閱讀