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