正文

業(yè)務(wù)邏輯層:組織(28)

ASP.NET設(shè)計(jì)模式 作者:(美)Scott Millett


4.1.5  領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)

在處理復(fù)雜業(yè)務(wù)邏輯時(shí),Domain Model模式非常有用。而DDD(Domain-Driven Design,領(lǐng)域驅(qū)動(dòng)設(shè)計(jì))就是一種流行的利用Domain Model模式的設(shè)計(jì)方法學(xué)。

簡(jiǎn)而言之,DDD就是一組幫助人們構(gòu)建能夠反映業(yè)務(wù)理解并滿足業(yè)務(wù)需求的應(yīng)用程序的模式和原則。除此之外,它還是一種思考開(kāi)發(fā)方法學(xué)的新方法。DDD探討對(duì)真實(shí)領(lǐng)域建模,首先要全面理解該領(lǐng)域,并將所有的術(shù)語(yǔ)、規(guī)則和邏輯放入到代碼的抽象表示(通常是以領(lǐng)域模型的形式)中。

下面將介紹DDD的主要方面,這是本書剩余部分中的大多數(shù)練習(xí)均要使用的方法學(xué)。

1. 通用語(yǔ)言

通用語(yǔ)言(ubiquitous language)的概念是,它應(yīng)該充當(dāng)一個(gè)公共詞匯表,開(kāi)發(fā)者、領(lǐng)域?qū)<壹叭魏纹渌麉⑴c項(xiàng)目的人都使用它來(lái)描述該領(lǐng)域。領(lǐng)域?qū)<揖哂刑囟I(lǐng)域知識(shí)和技能,并且在開(kāi)發(fā)領(lǐng)域模型的過(guò)程中與您密切協(xié)作,以確保在嘗試使用代碼表示業(yè)務(wù)模型之前完全理解該模型。在貸款應(yīng)用程序中,擔(dān)保人就可能是領(lǐng)域?qū)<?。通過(guò)聽(tīng)取此人的講解,可以構(gòu)建一個(gè)囊括了在申請(qǐng)貸款過(guò)程中使用的所有術(shù)語(yǔ)的詞匯表。所編寫的類、方法和屬性名稱都應(yīng)該基于同樣的通用語(yǔ)言。這可以讓您使用領(lǐng)域?qū)<夷軌蚶斫獾恼Z(yǔ)言來(lái)談?wù)摯a。此外,接觸該代碼的新開(kāi)發(fā)者也應(yīng)該能夠了解該領(lǐng)域。它還讓他們能夠以相對(duì)容易的方式與業(yè)務(wù)專家談?wù)搹?fù)雜業(yè)務(wù)邏輯的哪怕是最細(xì)微的細(xì)節(jié)。當(dāng)參與應(yīng)用程序開(kāi)發(fā)的各方都使用相同的語(yǔ)言時(shí),人們就可以容易地表達(dá)問(wèn)題和解決方法,從而讓應(yīng)用程序更快、更容易地構(gòu)建。

DDD并不是一個(gè)框架,但它確實(shí)有一組構(gòu)建塊或概念可供整合到解決方案中。在下面將逐個(gè)介紹這些概念。

2. 實(shí)體

實(shí)體就是4.1.3小節(jié)中曾經(jīng)討論過(guò)的事物,如電子商務(wù)網(wǎng)站中的訂單、客戶、商品,博客應(yīng)用程序中的博客和帖子對(duì)象。它們以一種抽象的方式包含了真實(shí)實(shí)體中的數(shù)據(jù)和行為。任何與實(shí)體相關(guān)的邏輯都應(yīng)該包含在它內(nèi)部。實(shí)體屬于需要標(biāo)識(shí)符的事物,在其整個(gè)生命周期中,該標(biāo)識(shí)符都將保持不變。考慮貸款應(yīng)用程序中的借款人。借款人有姓名,但姓名可能變化也可能重復(fù),因此需要添加一個(gè)單獨(dú)的標(biāo)識(shí),借款人在該借款應(yīng)用程序的整個(gè)生命周期中該標(biāo)識(shí)將保持不變,無(wú)論其姓名、職業(yè)或地址改變與否。通常,系統(tǒng)使用某種唯一標(biāo)識(shí)符或自動(dòng)編號(hào)值來(lái)為所有無(wú)法采用自然方式標(biāo)識(shí)的實(shí)體提供標(biāo)識(shí)符。有時(shí)候,實(shí)體確實(shí)具有自然鍵,如社會(huì)保險(xiǎn)號(hào)或員工號(hào)碼。并不是領(lǐng)域模型中的所有對(duì)象都是唯一的而且需要標(biāo)識(shí)。對(duì)于某些對(duì)象,數(shù)據(jù)是最重要的,而不是標(biāo)識(shí)。這些對(duì)象就被稱為值對(duì)象。

3. 值對(duì)象

值對(duì)象沒(méi)有標(biāo)識(shí),它們之所以重要只是因?yàn)樗鼈兊奶匦浴V祵?duì)象通常并不會(huì)單獨(dú)存在,它們通常是(但并非總是)實(shí)體的屬性?;仡?.1.3小節(jié)中編寫的簡(jiǎn)單銀行賬號(hào)應(yīng)用程序,應(yīng)該記得Transaction對(duì)象沒(méi)有標(biāo)識(shí),這是因?yàn)樗淮嬖谟谂c之相關(guān)的銀行賬號(hào)實(shí)體中,它是一個(gè)值對(duì)象,在其上下文中它本身并不單獨(dú)存在。


上一章目錄下一章

Copyright ? 讀書網(wǎng) ranfinancial.com 2005-2020, All Rights Reserved.
鄂ICP備15019699號(hào) 鄂公網(wǎng)安備 42010302001612號(hào)