關(guān)注領(lǐng)域模型有一段時(shí)間了,不論是分析階段的還是設(shè)計(jì)階段的。
其實(shí)領(lǐng)域模型的概念很早就有了,但是其概念非常容易被人混淆,首先我們要明確一下這個(gè)詞的語境:
它在軟件開發(fā)的分析與設(shè)計(jì)的兩個(gè)階段分別代表不同的含義。
在分析階段,領(lǐng)域模型完全是根據(jù)需求和用例得出的產(chǎn)物,關(guān)于此時(shí)領(lǐng)域模型的概念,可以參考拉爾曼的UML模式與應(yīng)用這本書(在第一版里面叫做概念模型),里面有一個(gè)明確的定義,在分析階段的領(lǐng)域模型是不考慮程序?qū)崿F(xiàn)上的問題的,也就是說完全是現(xiàn)實(shí)邏輯的體現(xiàn),只不過也是通過UML的類圖將其含義表達(dá)出來,這個(gè)時(shí)候的領(lǐng)域模型圖是不包括方法的,只有概念,屬性和關(guān)聯(lián)。它的側(cè)重點(diǎn)是分析,通過它去更好的理解系統(tǒng)。不過目前結(jié)合國內(nèi)的項(xiàng)目情況來看,在行業(yè)領(lǐng)域內(nèi),這方面的積累還不是很多,大部分項(xiàng)目還是停留在大量的需求文檔階段,并沒有去積累出精練的領(lǐng)域模型。
而在設(shè)計(jì)階段,是以分析階段的領(lǐng)域模型作為依據(jù),在分析階段通過用例,需求得到一個(gè)真實(shí)世界的模型,但是離實(shí)際軟件開發(fā)中的類還是有一定差距的,需要不斷細(xì)化才能得到軟件中的類進(jìn)一步的提煉成為真正的類,這個(gè)類是出現(xiàn)在J2EE框架的領(lǐng)域?qū)樱?它也叫做領(lǐng)域模型,目前在網(wǎng)上討論的最多的,實(shí)際上都是指設(shè)計(jì)階段的領(lǐng)域模型的實(shí)現(xiàn)。而這個(gè)時(shí)候提到的領(lǐng)域模型與分析階段是有區(qū)別的,某些概念都可能會(huì)有變更。在這個(gè)階段,有Eric Evans提出的Domain-Driven Design的理論支撐,有Martin Fowler在企業(yè)應(yīng)用架構(gòu)模式中的Domain Model做指引,我個(gè)人認(rèn)為DDD當(dāng)中是更側(cè)重于設(shè)計(jì)階段的,通過DDD當(dāng)中所提供的方法可以很科學(xué)的得到領(lǐng)域?qū)拥念I(lǐng)域模型。這個(gè)時(shí)候還會(huì)是去考慮到如何實(shí)現(xiàn),關(guān)注對象之間流轉(zhuǎn),對象的狀態(tài),以及如何持久化,比如利用hibernate,jdo,ejb等技術(shù)去進(jìn)行持久化。
據(jù)我目前所了解的情況,在當(dāng)前J2EE的大部分開發(fā)框架下,利用設(shè)計(jì)階段的領(lǐng)域模型用來實(shí)施的項(xiàng)目也并不多。究其也原因是多方面的,很多帖子里面都討論過。即使是在hibernate出來已經(jīng)有幾年的今天,很多人還是在針對數(shù)據(jù)庫表結(jié)構(gòu)進(jìn)行開發(fā),在利用面向?qū)ο蟮恼Z言做著面向過程的事,思想也不是1,2天就能轉(zhuǎn)變過來的。