您好,登錄后才能下訂單哦!
我是2012年開始接觸到DDD(領域驅動設計)的, 后續陸陸續續研讀過幾遍Eric的大作《領域驅動設計:軟件核心復雜性應對之道》,也使用DDD重構過一個項目。總的感受是DDD的一些概念比較晦澀難懂,很難掌握,因此想寫個系列短文,希望能用通俗易懂的語言幫助大家更輕松更深入地理解DDD。文章很多都是我個人體會和理解,難免有錯誤,希望大家能及時指正,共同提高。
本文是系列短文第一篇,介紹DDD的起始概念模型驅動設計。
軟件開發可以看做是一個把用戶需求轉換為可正確運行的程序的過程,其中最關鍵部分是把用戶需求轉換成代碼。我們要學習的DDD實際上就是一種軟件開發方法,它相比之前的軟件開發方法,能更好地應對軟件的核心復雜度。為了能更好的理解它,我們先回顧下之前的軟件開發方法及其存在問題。
在上世紀60年代,由于需求簡單,軟件開發以作坊式開發為主。但是隨著硬件的飛速發展,軟件復雜度也迅速激增,終于在70年引發了軟件危機。為了應對危機,業界借鑒成熟生產制造管理方法,發展出以“過程為中心”的瀑布式開發方法。
瀑布式開發把整個軟件開發過程劃分為需求分析、方案設計、編碼、測試等階段,希望以這種類似工業流水線的作業分工方式來控制軟件開發的風險和成本。
為了解決瀑布式開發的開發效率低下、響應需求速度慢的問題,輕量級的,更能適應變化的敏捷軟件開發方法被普遍認可并迅速流行起來,極限編程就是其中的一種。
XP主要由13個實踐構成,是一種近螺旋式的開發方法。它將復雜的開發過程分解為一個個相對比較簡單的小周期;通過積極的交流、反饋以及其它一系列的方法,開發人員和客戶可以非常清楚開發進度、變化、待解決的問題和潛在的困難等,并根據實際情況及時地調整開發過程。
為了與瀑布式開發做對比,我們把XP簡單理解為下圖:
通過上圖我們可以看到,XP沒有劃分分析、設計、編碼和測試等階段,需求可以在一個周期為1~2周的迭代中快速交付。XP之所以能做到快速交付,有如下幾個原因:
XP非常反對做預先設計,需求分析與設計會被拆分到用戶故事乃至TDD的小步迭代中去做,在每個小迭代中代碼只會根據當前需求簡單實現;當在后續迭代過程中發現代碼難以滿足新需求時,需要通過重構來增加代碼對新需求的適應性,以便能夠快速實現新需求。這種做法固然能帶來很多好處,但是也存在一些缺陷:
為了彌補XP在應對軟件核心復雜度的缺陷,eric在2003年提出了一種新的方法,他認為我們需要引入領域模型并圍繞它來做需求分析和軟件設計,這就是模型驅動開發。這一論述有以下幾個要點:
最后總結下,模型驅動設計通過對軟件核心復雜度的統一建模,解決了瀑布式開發在需求分析、軟件設計上的溝通、反饋和知識整合上的缺陷,也解決了XP極簡主義設計存在的缺陷。
文本重點敘述了我們為什么需要領域模型,領域模型構建需要注意的幾個基本原則,但是具體要怎么來構建領域模型呢?請看下一篇《輕松學DD之二:如何高效消化知識》。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。