|
本文是從 What is Domain Driven Design? 這篇文章翻譯而來。
”…在很多領(lǐng)域,專家的作用體現(xiàn)在他們的專業(yè)知識上而不是智力上。“
-- Don Reinertsen
領(lǐng)域驅(qū)動設(shè)計(Domain Driven Design)是一種軟件開發(fā)方法,目的是讓軟件系統(tǒng)在實現(xiàn)時準(zhǔn)確的基于對真實業(yè)務(wù)過程的建模并根據(jù)真實業(yè)務(wù)過程的調(diào)整而調(diào)整。
傳統(tǒng)的開發(fā)工作趨向于一種以技術(shù)為先導(dǎo)的過程,需求從業(yè)務(wù)方傳遞到開發(fā)團隊,開發(fā)人員依據(jù)需求上的描述創(chuàng)造出最有可能的假想。
在瀑布開發(fā)過程中,這導(dǎo)致了大量的需要頻繁校對、分析、復(fù)核和審批的需求文檔。之后這些文檔被交給開發(fā)團隊去變成能夠運行的軟件。
敏捷開發(fā)方法同樣可以采納瀑布模式過程中產(chǎn)生的需求文檔,但敏捷方法在實際的處理過程中會把它們分成很小的任務(wù)和“故事”,之后的開發(fā)工作將依據(jù)這些任務(wù)的排序。
領(lǐng)域驅(qū)動設(shè)計很大程度上使你從這兩種截然不同的結(jié)果中抽身出來,讓你能看到需求是如何在第一現(xiàn)場被收集到——如果你愿意看的話,它在動手先做的方式和在最后一分鐘才做的方式之間做了彌補。
領(lǐng)域驅(qū)動設(shè)計方式知道需求是永遠(yuǎn)不會“完成”的,需求就像一個活的文檔。更重要的是,這些仍待討論的活文檔實際上就是軟件自身——所有的文檔都是程序代碼的一種影像,一種演示品。
隨著軟件系統(tǒng)的開發(fā)和發(fā)展,你對各種問題的理解也會更深——領(lǐng)域驅(qū)動設(shè)計就是要通過深入的理解問題來找到問題的解決方案。
然而,領(lǐng)域驅(qū)動設(shè)計真正的不同之處卻是,它把軟件系統(tǒng)當(dāng)作業(yè)務(wù)過程的一個影射,是使能動,而不是驅(qū)動。領(lǐng)域驅(qū)動設(shè)計是要你深入到業(yè)務(wù)過程中,了解業(yè)務(wù)術(shù)語和實踐方法。技術(shù)方面的事被放在了第二位,只是最終的一種手段而已。
Ubiquitous語言(UL)是領(lǐng)域驅(qū)動設(shè)計的中心——這是一種共有的不斷成長的語言。它是一種來源于業(yè)務(wù)術(shù)語、經(jīng)過開發(fā)團隊的補充而產(chǎn)生的協(xié)商后的語言。如果一個業(yè)務(wù)人員不懂得UL里的一個術(shù)語,有可能是UL需要改進(jìn)發(fā)展。如果一個技術(shù)人員不懂得UL里的一個術(shù)語,有可能是他們需要跟領(lǐng)域?qū)<疫M(jìn)行交流。
領(lǐng)域?qū)<沂穷I(lǐng)域驅(qū)動設(shè)計里第二重要的組成部分——這些人能夠?qū)@個領(lǐng)域有深入的了解,包括這個業(yè)務(wù)本身。這些人構(gòu)成了開發(fā)過程中必要的組成部分。他們也許像一些敏捷開發(fā)方法里傳統(tǒng)的產(chǎn)品擁有者那樣不需要“全天候”的在職,但他們必須在開發(fā)過程中能被持續(xù)的接觸到,而且隨時準(zhǔn)備好參與到開發(fā)過程中。領(lǐng)域?qū)<也荒鼙划?dāng)作門外人,而應(yīng)被當(dāng)作領(lǐng)域驅(qū)動設(shè)計過程中的核心——他們非常像是開發(fā)團隊中的一部分,就像普通的開發(fā)者和測試者一樣。
領(lǐng)域驅(qū)動設(shè)計沒有開始和結(jié)束——它是一個不斷的再評估,再重構(gòu),再建模,再設(shè)計的持續(xù)過程——每一次的對話都會使你對問題有更進(jìn)一步的理解。領(lǐng)域驅(qū)動設(shè)計沒有“完成”點——它永遠(yuǎn)都在進(jìn)行;Ubiquitous語言會不斷發(fā)展和成長,領(lǐng)域模型隨著對業(yè)務(wù)理解的改變而改變,代碼不斷的再組織和重構(gòu)來更好的表現(xiàn)你的理解。
各種模擬產(chǎn)物產(chǎn)生又拋棄,而唯一真正有意義的只有代碼。它是解決方案的唯一表達(dá),是一種不再抽象的表達(dá)。文檔是用來解釋和描述系統(tǒng)的,而只有代碼能不失分毫的做到這些。這就是說,在領(lǐng)域驅(qū)動設(shè)計里,代碼必須保持高質(zhì)量,要清晰,要有表達(dá)力,沒有技術(shù)上省略和專門用語,盡可能的要讓代碼能夠在被解釋時對領(lǐng)域?qū)<矣行┮饬x。
領(lǐng)域驅(qū)動設(shè)計里沒有精巧的代碼,也沒有奇特的處理過程,或“你不需要知道”的模塊。領(lǐng)域?qū)<也恍枰蔀殚_發(fā)人員來理解軟件系統(tǒng)里用來做這些工作的關(guān)鍵部分是什么。他們同樣也不需要考慮數(shù)據(jù)庫或批處理任務(wù)或其他技術(shù)相關(guān)的方面。
領(lǐng)域驅(qū)動設(shè)計是敏捷方法的終極表達(dá)——它是用來處理不斷變化和發(fā)展的需求的——正如任何一個從未涉足軟件項目的人都知道——一個項目的需求從開始到結(jié)束保持一成不變是極其罕見的,絕大多數(shù)情況是它會隨著業(yè)務(wù)的增長和變化而變化。
通過不斷的交流,領(lǐng)域驅(qū)動設(shè)計會指導(dǎo)你用軟件最精確的表達(dá)你的業(yè)務(wù)過程。
it知識庫:什么是領(lǐng)域驅(qū)動設(shè)計(Domain Driven Design)?,轉(zhuǎn)載需保留來源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。