王飛
【摘要】本文從企業(yè)級(jí)應(yīng)用的系統(tǒng)開(kāi)發(fā)現(xiàn)狀入手,分析驅(qū)動(dòng)數(shù)據(jù)庫(kù)設(shè)計(jì)方法在Web應(yīng)用開(kāi)發(fā)中的不足,從而引出模型驅(qū)動(dòng)的領(lǐng)域軟件的設(shè)計(jì)方法,介紹了基于模型驅(qū)動(dòng)的領(lǐng)域軟件設(shè)計(jì)方法的開(kāi)發(fā)模式。
【關(guān)鍵詞】模型驅(qū)動(dòng)領(lǐng)域軟件開(kāi)發(fā)
在互聯(lián)網(wǎng)越發(fā)重要的今天,人們已經(jīng)越發(fā)的離不開(kāi)互聯(lián)網(wǎng),無(wú)論是在工作中還是在日常的生活中,互聯(lián)網(wǎng)依然占據(jù)了人們大部分的時(shí)間,而且許多與生活工作相關(guān)的應(yīng)用也都被架構(gòu)在Web之上。
一、數(shù)據(jù)庫(kù)驅(qū)動(dòng)設(shè)計(jì)方法存在的不足
1.不能有效的反應(yīng)人們的需求。傳統(tǒng)的核心軟件開(kāi)發(fā)是一種以關(guān)系型數(shù)據(jù)庫(kù)為基礎(chǔ)進(jìn)行設(shè)計(jì)與開(kāi)發(fā)的,這種方式必然導(dǎo)致了軟件對(duì)需求分析和實(shí)現(xiàn)系統(tǒng)的不一致性,也就由此影響了設(shè)計(jì)院的設(shè)計(jì)思維和思路。因此采用面向?qū)ο蟮臄?shù)據(jù)庫(kù)成為了首要選擇。
2.運(yùn)行性能影響。從理論上來(lái)說(shuō),數(shù)據(jù)是可以持久化的,只要服務(wù)器不停機(jī)或者有足夠的存儲(chǔ)器,那么數(shù)據(jù)就可以一直在內(nèi)存中永久的保留下去。因此,在進(jìn)行軟件系統(tǒng)設(shè)計(jì)之初,設(shè)計(jì)人員應(yīng)將重點(diǎn)放在問(wèn)題域上,而不是對(duì)數(shù)據(jù)庫(kù)的容量上。
3.導(dǎo)致過(guò)程化編程。面向?qū)ο蟪绦虻脑O(shè)計(jì)已經(jīng)慢慢的被人們所認(rèn)可與接收,傳統(tǒng)的以資料庫(kù)建木為主要核心的軟件開(kāi)發(fā)方法很有可能導(dǎo)致過(guò)程化程序的設(shè)計(jì),費(fèi)時(shí)費(fèi)力。因?yàn)樵趯?duì)數(shù)據(jù)庫(kù)建模的過(guò)程中,程序員首先要確定數(shù)據(jù)庫(kù)的結(jié)構(gòu),然后不斷的編寫(xiě)SQL語(yǔ)句、存儲(chǔ)過(guò)程。
4.軟件的模型和領(lǐng)域。用戶(hù)在使用軟件中的過(guò)程與環(huán)境被稱(chēng)為軟件的領(lǐng)域,所以軟件總是會(huì)與用戶(hù)的興趣和活動(dòng)相關(guān)。而軟件開(kāi)發(fā)的目的就是利用計(jì)算機(jī)去解決和實(shí)現(xiàn)領(lǐng)域的實(shí)際問(wèn)題。模型則是只是的一種簡(jiǎn)化和有意識(shí)的組成,一個(gè)合適的模型能夠很好的表達(dá)出軟件的領(lǐng)域。
二、模型驅(qū)動(dòng)設(shè)計(jì)和領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)
模型驅(qū)動(dòng)設(shè)計(jì)是領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)的基礎(chǔ),但是領(lǐng)域模型不僅僅是一個(gè)模型,更包括用來(lái)完成業(yè)務(wù)邏輯的許多元素。領(lǐng)域模型還具有模型所不具有的完成性約束、獨(dú)有性等特征。
1.領(lǐng)域的構(gòu)成。一般情況下,領(lǐng)域主要分為實(shí)體、值對(duì)象、工廠、倉(cāng)儲(chǔ)、服務(wù)等五種。實(shí)體作為領(lǐng)域的一種必須有自己的唯一的標(biāo)識(shí);值對(duì)象并沒(méi)有概念性的標(biāo)識(shí),但是它卻可以代表領(lǐng)域中的一種描述特征;工廠則是定義和創(chuàng)建實(shí)體的辦法,工廠主要的工作就是創(chuàng)建對(duì)象,其最主要的特征就是可以屏蔽創(chuàng)建對(duì)象的復(fù)雜性;倉(cāng)儲(chǔ)較之?dāng)?shù)據(jù)訪問(wèn)對(duì)象雖然在概念上大同小異,但在本質(zhì)上有著一定的區(qū)分,具體表現(xiàn)為倉(cāng)儲(chǔ)有“根”的概念,而數(shù)據(jù)訪問(wèn)對(duì)象則沒(méi)有;服務(wù)在一般情況下是沒(méi)有狀態(tài)的,只有在被操作時(shí)才會(huì)出現(xiàn)可以代表領(lǐng)域某些特征的狀態(tài)。
2.領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)的系統(tǒng)分層架構(gòu)。在領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)的系統(tǒng)中,之前普遍采用的MVC分層架構(gòu)將會(huì)被進(jìn)一步細(xì)化,使得領(lǐng)域模型可以得到隔離(如圖1)。
(1)用戶(hù)界面層(表現(xiàn)層):這一層包括了所有用于服務(wù)訪問(wèn)系統(tǒng)的客戶(hù)端,同時(shí)通過(guò)攔截客戶(hù)端的請(qǐng)求,并將其通過(guò)單一的登錄入口,將其構(gòu)造層會(huì)話(huà)管理,并傳遞到客戶(hù)端。(2)應(yīng)用層:這一層并不負(fù)責(zé)業(yè)務(wù)邏輯的實(shí)現(xiàn),其主要的工作職責(zé)就是定義系統(tǒng)需要完成的工作,并對(duì)下面的領(lǐng)域?qū)拥墓ぷ鬟M(jìn)行指導(dǎo)和實(shí)現(xiàn)業(yè)務(wù)邏輯工作。(3)領(lǐng)域?qū)樱簩?shí)現(xiàn)全部的業(yè)務(wù)邏輯工作,是整個(gè)業(yè)務(wù)軟件的核心,是重中之重。(4)基礎(chǔ)結(jié)構(gòu)層:主要工作職責(zé)是發(fā)送消息,為領(lǐng)域的持久化和用戶(hù)頁(yè)面的窗口繪制等進(jìn)行工作,此外基礎(chǔ)結(jié)構(gòu)層還負(fù)責(zé)與外部資源、系統(tǒng)的通信。
三、領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)的優(yōu)點(diǎn)
利用領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)方法對(duì)系統(tǒng)進(jìn)行建模和開(kāi)發(fā)的過(guò)程中,所產(chǎn)生的優(yōu)點(diǎn)主要有兩點(diǎn):第一、DDD采用面向?qū)ο蟮乃季S方式在模型驅(qū)動(dòng)的基礎(chǔ)上進(jìn)行開(kāi)發(fā),符合人類(lèi)的自然思維邏輯。第二、采用領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)出的系統(tǒng)可以充分的利用諸如Net服務(wù)器等中間件的分布式集群處理的能力,從而減輕了數(shù)據(jù)庫(kù)的載重負(fù)擔(dān)。
四、結(jié)束語(yǔ)
通過(guò)對(duì)軟件領(lǐng)域的分析,得到一個(gè)領(lǐng)域模型,在領(lǐng)域模型的基礎(chǔ)上進(jìn)行軟件的設(shè)計(jì)與實(shí)現(xiàn)工作,通過(guò)重構(gòu)的方法進(jìn)行領(lǐng)域模型的精化工作。
參考文獻(xiàn)
[1]甄鐳. .Net與設(shè)計(jì)模式[M].北京:電子工業(yè)出版社,2006
[2]陳大峰,張澤鑫. Eric Evans.領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)[M].北京:清華大學(xué)出版社,2006
[3]湯晨,吳朝暉.一個(gè)利用模型驅(qū)動(dòng)體系結(jié)構(gòu)技術(shù)的分布式系統(tǒng)實(shí)現(xiàn)[J].計(jì)算機(jī)工程與應(yīng)用,2003,(33):133-135
[4]王健,王軍. WhiteC. xSLT從入門(mén)到精通[M].北京:機(jī)械出版社,2003