摘要: 本文介紹了MVC設(shè)計模式的概念,討論了MVC設(shè)計模式在ASP.Net環(huán)境下的實現(xiàn),并對MVC在ASP.NET環(huán)境下的應(yīng)用特性進行了分析。
關(guān)鍵詞: MVC設(shè)計模式 ASP.NET 系統(tǒng)開發(fā) 實現(xiàn) 特性分析
一、引言
隨著程序規(guī)模和復(fù)雜性的增大,人們在探討一種合理的分析、設(shè)計和開發(fā)的模式。以使得軟件系統(tǒng)尤其是大型軟件系統(tǒng)能像制造機器一樣。精確地分工制造,方便地組合使用,靈活地拆卸和簡單地維修,使生產(chǎn)效率和軟件重用度能夠得到很大的提高。MVC模式就是這樣一種應(yīng)運而生的軟件設(shè)計模式。
二、MVC設(shè)計模式
(一)MVC設(shè)計思想
在面向?qū)ο笙到y(tǒng)的設(shè)計中,類及其生成的對象是構(gòu)成面向?qū)ο笙到y(tǒng)的最基本元素,采用設(shè)計方法組合這些元素,得到構(gòu)成面向?qū)ο笙到y(tǒng)的構(gòu)件。同時,這些構(gòu)件的設(shè)計方法在經(jīng)過不斷的改進和完善后逐漸成型,成為構(gòu)成面向?qū)ο笙到y(tǒng)的基本設(shè)計參考,稱為設(shè)計模(Design Pattern)。
MVC英文即Model-View-Controller,是目前軟件設(shè)計中比較流行的一種模式。MVC模式的出現(xiàn)不僅實現(xiàn)了功能模塊和用戶訪問模塊的分離,同時它還提高了應(yīng)用系統(tǒng)的可維護性、可擴展性、可移植性和組件的可復(fù)用性。
MVC將應(yīng)用程序分為三個部分:模型(Model)、視圖(View)、控制器(Controller)。它們的作用分別描述如下:
模型(Model)指的是真正完成任務(wù)的代碼,包含應(yīng)用系統(tǒng)的核心功能,表示一個應(yīng)用系統(tǒng)的數(shù)據(jù),并且包含訪問、維護和管理這些數(shù)據(jù)的邏輯。所有屬于應(yīng)用系統(tǒng)持久狀態(tài)的數(shù)據(jù)都應(yīng)該保存于模型對象里。模型提供的服務(wù)必須足夠適用于不同的終端。一個模型聚集了相關(guān)的數(shù)據(jù)和操作,以提供一個詳細(xì)而精確的服務(wù)。一個模型的接口提供了訪問和更新模型狀態(tài),以及執(zhí)行封裝在模型中的復(fù)雜進程的方法。模型服務(wù)被控制器訪問,用于查詢或更改模型的狀態(tài)。當(dāng)模型狀態(tài)發(fā)生變化時,模型會通報給視圖。在模型同界面分離的情況下,代碼即可實現(xiàn)可管理性和可重用性。
視圖(View)表示用戶視圖部分,是用戶看到的與之交互的界面,其中并沒有業(yè)務(wù)邏輯代碼。對于視圖的處理僅限于視圖上數(shù)據(jù)的采集和處理以及用戶的請求。
控制(Controller)是聯(lián)系模型與視圖之間的紐帶,控制模型和視圖之間的交互過程。它獲取并翻譯用戶輸入的動作,指定執(zhí)行該動作的模型,或者根據(jù)用戶的輸入和執(zhí)行的結(jié)果來選擇下一個視圖??梢岳斫鉃閺挠脩艚邮照埱螅瑢⒛P团c視圖匹配在一起,共同完成用戶的請求??刂茖酉喈?dāng)于一個分發(fā)器,決定選擇什么樣的模型,選擇什么樣的視圖,可以完成什么樣的用戶請求。例如,用戶點擊一個連接,控制層接受請求后,并不處理業(yè)務(wù)信息,它只把用戶的信息傳遞給模型,告訴模型做什么,選擇符合要求的視圖返回給用戶。
(二)MVC優(yōu)點
MVC設(shè)計模式具有條理清晰,易于擴展,運用可分布的特點,因此在系統(tǒng)開發(fā)中具有顯著的優(yōu)勢。具體表現(xiàn)為以下三個優(yōu)點:
1.模型、視圖與控制器的分離,使一個模型可以被多個視圖調(diào)用,提高了模型的利用率。
2.MVC設(shè)計模式可以使系統(tǒng)方便地支持其它新的客戶端類型,除了運行在桌面型的瀏覽器外,還可以運行在PDA、帶PDA功能的手機、WAP瀏覽器上。
3.由于MVC設(shè)計模式分離了數(shù)據(jù)的控制與顯示,從而可以使開發(fā)者更容易協(xié)作開發(fā),后臺開發(fā)人員可以專注業(yè)務(wù)邏輯的編程,前臺開發(fā)人員專注于用戶交互的界面,從而縮短產(chǎn)品的開發(fā)周期。
三、MVC設(shè)計模式在基于ASP.NET系統(tǒng)開發(fā)中的實現(xiàn)
ASP.NET提供了實現(xiàn)MVC設(shè)計模式的天然環(huán)境。ASP.NET采code-behind代碼來處理顯示頁面的用戶交互,通過code-behind源代碼文件,來實現(xiàn)邏輯控制代碼、腳本語言、HTML的分離。ASP.NET應(yīng)用系統(tǒng)按照三層Web結(jié)構(gòu)劃分為表示層、業(yè)務(wù)層和數(shù)據(jù)層。表示層由Web窗體組成,實現(xiàn)視圖和控制器的功能;業(yè)務(wù)層包括業(yè)務(wù)實體組件和業(yè)務(wù)邏輯組件;數(shù)據(jù)層包括數(shù)據(jù)對象、數(shù)據(jù)訪問組件等。由業(yè)務(wù)層和數(shù)據(jù)層共同實現(xiàn)模型的功能。以下用Web系統(tǒng)中常見的用戶信息查詢模塊為例,探討MVC設(shè)計模式在ASP.NET應(yīng)用中的實現(xiàn)機制。
Model用來管理應(yīng)用程序域的行為和數(shù)據(jù)。在本系統(tǒng)中將業(yè)務(wù)邏輯、與數(shù)據(jù)庫連接和交互的公共操作封裝在單獨的類中,用專門的類來處理業(yè)務(wù)邏輯和數(shù)據(jù)邏輯,從而提高了代碼的重用性。具體實現(xiàn)方式為:在公用的基本類庫中,定義DataBase類作為公共數(shù)據(jù)庫操作的基本類,在DataBase類中實現(xiàn)與數(shù)據(jù)庫連接和交互的公共操作的代碼如下:
Public class DataBase∥對數(shù)據(jù)庫操作的基本類
{
Public DataSet RunSql(string SQL)//執(zhí)行SQL語句,返回DataSet對象
{
SqlConnection conn=new SqlConnection(ConnStr)//建立SQL連接
SqlDataAdapter da=new SqlDataAdapter(SQL,Conn);
//創(chuàng)建SglDataAdapter對象并實現(xiàn)連接打開和關(guān)閉
DataSet ds=new DataSet();//創(chuàng)建DataSet對象
da.Fill(ds);//填充數(shù)據(jù)到DataSet中
da.Dispose();//釋放SqlConnection對象
return ds;//返回DataSet對象
}
}
應(yīng)用程序在數(shù)據(jù)訪問層(DAO)中通過引用公用基本類中的方RunSql()來獲取數(shù)據(jù)對象,下面的數(shù)據(jù)層實現(xiàn)所有用戶的基本信息,具體方法如下:
Public class UserInfoDAO,BaseObdect
//繼承所有數(shù)據(jù)對象的基類BaseObdect
{
Public DataSet GetUseInfo()//從數(shù)據(jù)庫中獲取用戶信息
{
String sql=“select * from Userlnfo”;
//SQL查詢語句
return db.RunSql(sql);//調(diào)用數(shù)據(jù)庫操作的基本類中RunSql()方法
}
}
Controller不直接對Model中的數(shù)據(jù)邏輯進行操作,而是通過業(yè)務(wù)邏輯獲取數(shù)據(jù)層(DAO)中的數(shù)據(jù)對象。Biz層由類(.CS)文件組成,其中業(yè)務(wù)邏輯組件封裝了具體的處理邏輯。以下為根據(jù)一個用戶ID返回對應(yīng)的用戶信息處理邏輯。
Public class UserInfoBiz
{
UserInfoDAO userInfo=new UserlnfoDAO();
//實例化對應(yīng)數(shù)據(jù)邏輯類
Public DataSet GetSingleUserInfo(string ID);
//得到包含用戶信息的—個DataSet
{
DataSet ds=userInfo.GetUserInfo();
//調(diào)用DAO層UserInfoDAO類中的GetUserInfo()方法
DataView dr=New DataView();//創(chuàng)建DataView對象
dv.Table=ds.Tables;//ds表數(shù)據(jù)復(fù)制到dv中
dv.RowFilter=“userID”+ID;//過濾符合ID用戶的紀(jì)錄
DataSet dsl=(DataSet)dv;//強制轉(zhuǎn)換為DataSet對象
return(ds1);
}
}
最后,Controller中的事件調(diào)用Model中的業(yè)務(wù)邏輯方法,并且把響應(yīng)提交到對應(yīng)的視圖組件以產(chǎn)生響應(yīng),完成對
客戶端表單數(shù)據(jù)的描述。
四、基于ASP.NET的MVC設(shè)計模式特性分析
(一)優(yōu)點
通過上述實現(xiàn)過程進行分析,在ASP.NET中用MVC模式開發(fā)的應(yīng)用程序具有如下優(yōu)點:
1.減少頁面依賴性,提升代碼復(fù)用。
通過頁面中的代碼分離,可降低系統(tǒng)設(shè)計的復(fù)雜性,減少頁面中的重復(fù)代碼。
2.系統(tǒng)結(jié)構(gòu)清晰,增加系統(tǒng)的可擴展性。
MVC模式實現(xiàn)的應(yīng)用程序具有極其良好的結(jié)構(gòu)和可擴展性,它可以實現(xiàn)—個模型的多個視圖,采用多個控制器,當(dāng)模型改變時所有視圖將自動刷新??刂破飨嗷オ毩⒐ぷ?。
3.便于優(yōu)化系統(tǒng),提高系統(tǒng)性能。
由于每次向數(shù)據(jù)庫請求,都要從數(shù)據(jù)庫裝載數(shù)據(jù),通過公共的數(shù)據(jù)訪問類和ASP.NET的內(nèi)部機制可以把數(shù)據(jù)存放在高速緩存中,從而優(yōu)化整個應(yīng)用系統(tǒng)的性能。
4.系統(tǒng)模型獨立,提高系統(tǒng)的可測性。
模型獨立于視圖,既可以在ASP.NET環(huán)境之外用第三方工具測試模型,也可以通過編寫測試腳本實現(xiàn)自動化測試,大大提高測試的有效性和效率。
(二)不足之處
在ASP.NET中使用MVC模式也有不足之處:一方面,控制器不直接訪向數(shù)據(jù)層,增加了代碼的復(fù)雜性,對于一些簡單的業(yè)務(wù)邏輯附加的額外代碼所占比重比較大。另一方面,代碼的分離增加了代碼的維護成本,如果有涉及三者的變化時,在不同的文件中修改顯然比在同—個文件修改花費的代價大。因此,在設(shè)計系統(tǒng)前權(quán)衡這樣的代價是必不可少的。
五、結(jié)語
采用MVC模式來設(shè)計和開發(fā)軟件系統(tǒng),能夠使整個系統(tǒng)結(jié)構(gòu)清晰,容易進行模塊劃分,增強了各層、各模塊的高內(nèi)聚低耦合的特性,使各個模塊的開發(fā)相對獨立,使得軟件的擴展性、復(fù)用性和維護性方面有了極大的提高,給系統(tǒng)的開發(fā)、擴展、維護帶來了很大的方便,并且系統(tǒng)也可以很容易地加入新的業(yè)務(wù)和功能,從而適應(yīng)各種需求的變化。
參考文獻:
[1]鄒鵬,尚雄等.基于MVC模式的客戶關(guān)系管理系統(tǒng)設(shè)計[J].計算機應(yīng)用研究,2005,(02):21-23.
[2]黎永良,崔杜武.MVC設(shè)計模式的改進與應(yīng)用[J].計算機工程,2005,(9):96-98.
[3]陳川等.基于MVC設(shè)計模式構(gòu)筑JSP/Servlet+EJB的Web應(yīng)用[J].計算機工程,2001,27(11):48-49.