我是2012年開(kāi)始接觸到DDD(領(lǐng)域驅(qū)動(dòng)設(shè)計(jì))的, 后續(xù)陸陸續(xù)續(xù)研讀過(guò)幾遍Eric的大作《領(lǐng)域驅(qū)動(dòng)設(shè)計(jì):軟件核心復(fù)雜性應(yīng)對(duì)之道》,也使用DDD重構(gòu)過(guò)一個(gè)項(xiàng)目。總的感受是DDD的一些概念比較晦澀難懂,很難掌握,因此想寫(xiě)個(gè)系列短文,希望能用通俗易懂的語(yǔ)言幫助大家更輕松更深入地理解DDD。文章很多都是我個(gè)人體會(huì)和理解,難免有錯(cuò)誤,希望大家能及時(shí)指正,共同提高。
本文是系列短文第一篇,介紹DDD的起始概念模型驅(qū)動(dòng)設(shè)計(jì)。
在常寧等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場(chǎng)前瞻性、產(chǎn)品創(chuàng)新能力,以專(zhuān)注、極致的服務(wù)理念,為客戶(hù)提供網(wǎng)站制作、網(wǎng)站設(shè)計(jì) 網(wǎng)站設(shè)計(jì)制作按需求定制網(wǎng)站,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),品牌網(wǎng)站設(shè)計(jì),成都營(yíng)銷(xiāo)網(wǎng)站建設(shè),成都外貿(mào)網(wǎng)站制作,常寧網(wǎng)站建設(shè)費(fèi)用合理。
軟件開(kāi)發(fā)可以看做是一個(gè)把用戶(hù)需求轉(zhuǎn)換為可正確運(yùn)行的程序的過(guò)程,其中最關(guān)鍵部分是把用戶(hù)需求轉(zhuǎn)換成代碼。我們要學(xué)習(xí)的DDD實(shí)際上就是一種軟件開(kāi)發(fā)方法,它相比之前的軟件開(kāi)發(fā)方法,能更好地應(yīng)對(duì)軟件的核心復(fù)雜度。為了能更好的理解它,我們先回顧下之前的軟件開(kāi)發(fā)方法及其存在問(wèn)題。
在上世紀(jì)60年代,由于需求簡(jiǎn)單,軟件開(kāi)發(fā)以作坊式開(kāi)發(fā)為主。但是隨著硬件的飛速發(fā)展,軟件復(fù)雜度也迅速激增,終于在70年引發(fā)了軟件危機(jī)。為了應(yīng)對(duì)危機(jī),業(yè)界借鑒成熟生產(chǎn)制造管理方法,發(fā)展出以“過(guò)程為中心”的瀑布式開(kāi)發(fā)方法。
瀑布式開(kāi)發(fā)把整個(gè)軟件開(kāi)發(fā)過(guò)程劃分為需求分析、方案設(shè)計(jì)、編碼、測(cè)試等階段,希望以這種類(lèi)似工業(yè)流水線的作業(yè)分工方式來(lái)控制軟件開(kāi)發(fā)的風(fēng)險(xiǎn)和成本。
為了解決瀑布式開(kāi)發(fā)的開(kāi)發(fā)效率低下、響應(yīng)需求速度慢的問(wèn)題,輕量級(jí)的,更能適應(yīng)變化的敏捷軟件開(kāi)發(fā)方法被普遍認(rèn)可并迅速流行起來(lái),極限編程就是其中的一種。
XP主要由13個(gè)實(shí)踐構(gòu)成,是一種近螺旋式的開(kāi)發(fā)方法。它將復(fù)雜的開(kāi)發(fā)過(guò)程分解為一個(gè)個(gè)相對(duì)比較簡(jiǎn)單的小周期;通過(guò)積極的交流、反饋以及其它一系列的方法,開(kāi)發(fā)人員和客戶(hù)可以非常清楚開(kāi)發(fā)進(jìn)度、變化、待解決的問(wèn)題和潛在的困難等,并根據(jù)實(shí)際情況及時(shí)地調(diào)整開(kāi)發(fā)過(guò)程。
為了與瀑布式開(kāi)發(fā)做對(duì)比,我們把XP簡(jiǎn)單理解為下圖:
通過(guò)上圖我們可以看到,XP沒(méi)有劃分分析、設(shè)計(jì)、編碼和測(cè)試等階段,需求可以在一個(gè)周期為1~2周的迭代中快速交付。XP之所以能做到快速交付,有如下幾個(gè)原因:
XP非常反對(duì)做預(yù)先設(shè)計(jì),需求分析與設(shè)計(jì)會(huì)被拆分到用戶(hù)故事乃至TDD的小步迭代中去做,在每個(gè)小迭代中代碼只會(huì)根據(jù)當(dāng)前需求簡(jiǎn)單實(shí)現(xiàn);當(dāng)在后續(xù)迭代過(guò)程中發(fā)現(xiàn)代碼難以滿(mǎn)足新需求時(shí),需要通過(guò)重構(gòu)來(lái)增加代碼對(duì)新需求的適應(yīng)性,以便能夠快速實(shí)現(xiàn)新需求。這種做法固然能帶來(lái)很多好處,但是也存在一些缺陷:
為了彌補(bǔ)XP在應(yīng)對(duì)軟件核心復(fù)雜度的缺陷,eric在2003年提出了一種新的方法,他認(rèn)為我們需要引入領(lǐng)域模型并圍繞它來(lái)做需求分析和軟件設(shè)計(jì),這就是模型驅(qū)動(dòng)開(kāi)發(fā)。這一論述有以下幾個(gè)要點(diǎn):
最后總結(jié)下,模型驅(qū)動(dòng)設(shè)計(jì)通過(guò)對(duì)軟件核心復(fù)雜度的統(tǒng)一建模,解決了瀑布式開(kāi)發(fā)在需求分析、軟件設(shè)計(jì)上的溝通、反饋和知識(shí)整合上的缺陷,也解決了XP極簡(jiǎn)主義設(shè)計(jì)存在的缺陷。
文本重點(diǎn)敘述了我們?yōu)槭裁葱枰I(lǐng)域模型,領(lǐng)域模型構(gòu)建需要注意的幾個(gè)基本原則,但是具體要怎么來(lái)構(gòu)建領(lǐng)域模型呢?請(qǐng)看下一篇《輕松學(xué)DD之二:如何高效消化知識(shí)》。