領域驅動設計
2020 年 4 月 22 日
領域驅動設計是一種軟體開發方法,其核心在於編寫一個領域模型,對領域的流程和規則有深入的了解。此名稱源自艾瑞克·埃文斯於 2003 年出版的一本書,透過一系列模式來描述此方法。自此之後,一群實務工作者進一步發展了這些想法,衍生出許多其他書籍和訓練課程。此方法特別適合於複雜的領域,其中需要組織許多經常混亂的邏輯。
軟體系統需要建立在一個發展完善的領域模型上的想法,至少在我進入這個產業時就已經存在了。我從吉姆·奧德爾身上學到了許多這種思考方式,他透過資料建模、資訊工程和物件導向分析來發展這種思考風格。在 1980 年代和 1990 年代,表示基礎領域是資料庫和物件導向社群中許多工作的關鍵部分。
艾瑞克·埃文斯透過他的書對此做出了偉大的貢獻,他發展出一套詞彙來討論此方法,找出超越當時討論中占主導地位的各種建模符號的主要概念元素。其核心思想是,要為複雜的領域開發軟體,我們需要建立 通用語言,將領域術語嵌入我們建構的軟體系統中。雖然許多人談論開發此類模型,但它們通常只在紙上完成,而且通常預期會在前期完成。DDD 強調在軟體中執行它們,並在軟體產品的生命週期中讓它們演化。艾瑞克是 極限編程 的堅定支持者,並將領域驅動設計視為極限編程方法的自然組成部分 - 這是大多數我認識的 XP 實務工作者的看法。
這本書引入了將物件分類為實體、值物件和服務物件的概念,也就是我所稱的Evans 分類,並識別了聚合的概念。我發現這些概念填補了物件思考上的一個重要空白,而這在程式語言和圖示符號中都無法找到。DDD 中特別重要的部分是策略設計的概念,也就是如何將大型網域組織成限界脈絡網路。在那個時間點之前,我沒看過任何人用令人信服的方式處理這個問題。
雖然 Eric 的背景根植於物件導向社群,但領域驅動設計的核心概念是概念性的,因此可以很好地套用在任何程式設計方法中,這點在策略設計層面特別明顯。
延伸閱讀
Eric 的原著以難讀聞名,但我誠心相信這本書值得花費心力,而且值得放在任何認真的開發人員的書架上。Vaughn Vernon 2013 年的著作是良好的進階讀物,描述了一些後續的想法,並特別專注於策略設計層面。