- 相關(guān)推薦
領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)之體會(huì)二
領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)之體會(huì)二2011-02-25 23:25領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)中分別用實(shí)體、值對(duì)象和服務(wù)來(lái)表示模型。其中所謂實(shí)體是具有唯一性的對(duì)象。在建模中,應(yīng)該盡早識(shí)別出實(shí)體。而值對(duì)象與實(shí)體恰恰相反,它不具有唯一性,其目的是為了減少建立實(shí)體的開(kāi)銷(xiāo)。值對(duì)象為了描述領(lǐng)域的特殊方面,我們只關(guān)心它的屬性,而不關(guān)心其唯一性。有些領(lǐng)域中的動(dòng)作,它們是一些動(dòng)詞,看上去卻不屬于任何對(duì)象。通常這樣的行為是跨越多個(gè)對(duì)象的。我們將這樣的行為,顯示的聲明為服務(wù)。在領(lǐng)域中,不應(yīng)該為每一個(gè)需要的操作來(lái)建立一個(gè)服務(wù)。但是當(dāng)一個(gè)操作凸顯為一個(gè)領(lǐng)域中的重要概念時(shí),就需要為它建立一個(gè)服務(wù)了。以下是服務(wù)的三個(gè)特征:1.服務(wù)執(zhí)行的操作涉及一個(gè)領(lǐng)域概念,這個(gè)領(lǐng)域概念通常不屬于一個(gè)實(shí)體或者值對(duì)象。
2.被執(zhí)行的操作涉及到領(lǐng)域中的其他對(duì)象。
3.操作是無(wú)狀態(tài)的。
需要注意的是,我們應(yīng)該嚴(yán)格區(qū)分領(lǐng)域?qū)拥姆⻊?wù)和基礎(chǔ)設(shè)施層的服務(wù)。設(shè)計(jì)時(shí)要確保領(lǐng)域?qū)颖3謴钠渌麑又懈綦x開(kāi)來(lái)。
為了降低模型的復(fù)雜性,便于系統(tǒng)并行開(kāi)發(fā),領(lǐng)域驅(qū)動(dòng)中也有模塊的概念。通過(guò)把整個(gè)系統(tǒng)分割為不同的模塊,來(lái)提高代碼的質(zhì)量,增進(jìn)內(nèi)聚,消除耦合。模塊應(yīng)該具有良好的接口,通過(guò)這些接口為其他模塊提供服務(wù)。
聚合、工廠(chǎng)和資源庫(kù)都與管理領(lǐng)域?qū)ο蟮纳芷谙嚓P(guān)。
聚合通過(guò)一個(gè)作為根的實(shí)體來(lái)訪(fǎng)問(wèn)其他屬性,用以保持?jǐn)?shù)據(jù)的一致性。根是外部可以訪(fǎng)問(wèn)的唯一對(duì)象。聚合是用來(lái)定義對(duì)象所有權(quán)和邊界的領(lǐng)域模式。我們通常不追求模型的完整性,而是讓它們盡量地簡(jiǎn)單和容易理解。聚合通過(guò)唯一的根實(shí)體,建立邊界將內(nèi)部和外部的對(duì)象劃分開(kāi)來(lái)。然而實(shí)際使用中,根實(shí)體的構(gòu)造函數(shù)往往會(huì)很大很復(fù)雜。當(dāng)對(duì)象的每個(gè)客戶(hù)程序持有關(guān)于對(duì)象構(gòu)建的專(zhuān)有知識(shí)時(shí),就意味著領(lǐng)域?qū)ο蠛途酆系姆庋b被破壞了。我們可以利用工廠(chǎng)來(lái)完成封裝復(fù)雜的對(duì)象創(chuàng)建過(guò)程。一種工廠(chǎng)是給聚合的根增加一個(gè)方法,這個(gè)方法用來(lái)創(chuàng)建對(duì)象,強(qiáng)化所有不變量,返回創(chuàng)建對(duì)象的引用或者拷貝。更好的方法是創(chuàng)建一個(gè)專(zhuān)用工廠(chǎng)類(lèi),這樣可以保持對(duì)象的簡(jiǎn)單,不會(huì)造成復(fù)雜的構(gòu)建邏輯的混亂。以下情況不需要?jiǎng)?chuàng)建工廠(chǎng):
1.構(gòu)造過(guò)程并不復(fù)雜;
2.對(duì)象的創(chuàng)建不涉及到其他對(duì)象的創(chuàng)建,所有的屬性需要傳遞給構(gòu)造函數(shù)。
3.客戶(hù)程序?qū)?shí)現(xiàn)很感興趣,可能希望選擇使用策略模式。
4.類(lèi)是特定的類(lèi)型,不涉及到繼承,所以不用在一系列的具體實(shí)現(xiàn)中進(jìn)行選擇。
資源庫(kù)的目的是封裝所有獲取對(duì)象引用所需的邏輯。工廠(chǎng)和資源庫(kù)都是模型驅(qū)動(dòng)設(shè)計(jì)中的模式。工廠(chǎng)關(guān)注的是對(duì)象的創(chuàng)建,而資源庫(kù)關(guān)心的是已經(jīng)存在的對(duì)象。需要注意:工廠(chǎng)是"純領(lǐng)域"的,而資源庫(kù)會(huì)包含對(duì)基礎(chǔ)設(shè)施的連接。
領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)是軟件設(shè)計(jì)的方法論,從思想到結(jié)構(gòu),闡述了軟件分析設(shè)計(jì)思路和方法。對(duì)我們的實(shí)際工作很有借鑒意義。
以上是對(duì)領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)的一點(diǎn)體會(huì),實(shí)踐是最好的老師,把理論融入實(shí)踐中,并取得成果,其樂(lè)無(wú)窮啊。就拿以前看一些經(jīng)典源代碼,有的類(lèi)被命名為XXXRepository,我就很不理解這樣命名的目的,學(xué)習(xí)了領(lǐng)域驅(qū)動(dòng)設(shè)計(jì),便知道了作者的用心。
【領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)之體會(huì)二】相關(guān)文章:
經(jīng)典的領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)在代碼實(shí)踐方面的心得體會(huì)04-28
活動(dòng)設(shè)計(jì)科學(xué)領(lǐng)域教案08-26
活動(dòng)設(shè)計(jì)健康領(lǐng)域教案12-19
幼兒活動(dòng)設(shè)計(jì)健康領(lǐng)域教案02-16
活動(dòng)設(shè)計(jì)健康領(lǐng)域教案7篇12-20
活動(dòng)設(shè)計(jì)健康領(lǐng)域教案(7篇)12-24
靜坐之體會(huì)04-27
名片的設(shè)計(jì)之電子教案04-28
秋風(fēng)之勁(二)04-27
健康領(lǐng)域心得體會(huì)02-20