技術(shù)高手講評ASP.NET MVC 1.0
最近正在考慮是否在我們的企業(yè)級應(yīng)用中使用ASP.NET MVC 1.0框架,因此會一直找使用它的理由,希望大家在關(guān)注技術(shù)的同時,結(jié)合企業(yè)應(yīng)用談?wù)勛约旱目捶ā?/P>
1、MVC的組成
Models:訪問數(shù)據(jù)庫,裝載數(shù)據(jù)、處理業(yè)務(wù)邏輯。在項目中體現(xiàn)為數(shù)據(jù)實體類加業(yè)務(wù)代理類。
Views:顯示數(shù)據(jù),用戶界面。在項目中體現(xiàn)為aspx頁面,偶爾可以加上code-behind。
Controller:按路由規(guī)則將請求的數(shù)據(jù)傳送給指定頁面,用于顯示;也可以把用戶輸入的數(shù)據(jù)傳遞給邏輯處理類。它可以包含簡單的驗證邏輯。不應(yīng)包含數(shù)據(jù)訪問邏輯。
2、為何使用MVC
提出MVC的目的無非是提高開發(fā)效率、提高可測試性。官方的ASP.NET MVC 1.0指南中指出(以下簡稱指南),基于MVC的Web應(yīng)用程序有如下優(yōu)點:
[1]對復(fù)雜的程序管理更方便
It makes it easier to manage complexity by dividing an application into the model, the view, and the ontroller.
[2]在開發(fā)上有更高的可控性
It does not use view state or server-based forms. This makes the MVC framework ideal for developers who want full control over the behavior of an application.
[3]Routing使軟件設(shè)計有更多靈活性
It uses a Front Controller pattern that processes Web application requests through a single controller. This enables you to design an application that supports a rich routing infrastructure.
[4]更加適合測試驅(qū)動開發(fā)
It provides better support for test-driven development (TDD).
[5]團(tuán)隊開發(fā)項目中有更高的可控性
It works well for Web applications that are supported by large teams of developers and Web designers who need a high degree of control over the application behavior.
同時MVC框架還有以下特點:
[1]將應(yīng)用程序分成各個組成部份,更有利于測試。MVC框架是基于接口的,這樣可以利用MOCK方式來替換你的實際類;做單元測試的時候,也可以不運行Contrllers,這樣的測試就更快更靈活。
[2]MVC框架是可擴(kuò)展的,你可以自己設(shè)計并替換視頻引擎、URL導(dǎo)向規(guī)則、Action的參數(shù)序列等等。同時MVC框架也支持依賴注入和控制反轉(zhuǎn),你可以從外部注入實例,而不用讓類自己創(chuàng)建實例,你還可以通過配置文件的方式創(chuàng)建實例,這樣使得測試更方便。
[3]強大的URL映射組件使得你的應(yīng)用程序的URL更易理解,同時具備搜索能力。你的URL不必包括文件路徑,這樣的設(shè)計很適合自定義查詢引擎和REST架構(gòu)。
[4]MVC框架仍然支持ASP.NET中的頁面、用戶控件、母版頁作為視圖的模板;同時你也還可以使用嵌套母版頁、行內(nèi)表達(dá)式(in-line expressions<%= %>)、服務(wù)器端控件、模板、數(shù)據(jù)綁定、本地化等等屬于ASP.NET已有的東西。
[5]同時ASP.NET中的FORM驗證、Windows驗證、URL授權(quán)、Membership、角色、輸出、數(shù)據(jù)緩存、Session、Profile 狀態(tài)管理、配置、Provider框架等特性在MVC框架中仍然是可用的。
小結(jié):ASP.NET MVC 1.0框架是基于ASP.NET的,所以他包括了ASP.NET中的幾乎所有特性。同時他為設(shè)計人員提供了一套測試的方案(當(dāng)然這是所有語言平臺MVC模式的共性)。在安裝了框架的VS2008中還增加了不少功能,可以方便地添加Views、Models、Controllers。
3、與三層結(jié)構(gòu)的ASP.NET應(yīng)用程序比較
與普通ASP.NET比較而言,***的區(qū)別還是在于前臺開發(fā),后臺包括的數(shù)據(jù)庫訪問、邏輯處理與以往的方式?jīng)]有明顯區(qū)別,在MVC框架中,這些統(tǒng)稱為Model。而三層結(jié)構(gòu)中,這些可以稱為數(shù)據(jù)訪問層與邏輯處理層。
[1]頁面開發(fā)
用這種模式開發(fā)的站點,光看頁面的代碼的確比以往少一些,但它更多地使用了頁面腳本(<% ... %>)用于顯示數(shù)據(jù)。在指南中并未提到不推薦使用服務(wù)器端控件,但是它提供了大量的HTML HELPER,而且還允許你自己添加Helper,比如DataGridHelper,所以在MVC框架中使用這些Helper會更方便些,不過這對于熟練工來說應(yīng)該影響不大,因為實際開發(fā)中我們更多使用的是Ctrl+C/Ctrl+V,復(fù)制幾個標(biāo)簽和復(fù)制幾個Helper方法所花的時間差不多??赡軐τ谛率謥碚f,如果對標(biāo)簽不熟悉的話,用這些Helper的速度會快些,但是這樣會影響新手掌握標(biāo)簽,真是矛盾吶。
[2]數(shù)據(jù)提交
普通的ASP.Net開發(fā),在提交數(shù)據(jù)的時候可能還需要通過設(shè)置數(shù)據(jù)綁定,或者在code-behind里寫封裝代碼;而在MVC中,框架自動幫助你將頁面上填寫的數(shù)據(jù)封裝到事先指定的Model中,數(shù)據(jù)提交操作在MVC框架挺方便。而且在普通ASP.NET頁面中,經(jīng)常會出現(xiàn)某個屬性無法綁回去的情況,這點在MVC中應(yīng)該可以得到解決。指南中提到了Routing的使用使得MVC框架下的應(yīng)用程序在操作自定義查詢時變得更方便,實際上在查詢方面跟普通方式并沒有多大區(qū)別,都是對封裝好的類進(jìn)行解析。至于“URL更容易理解”,現(xiàn)在應(yīng)用程序都是從界面上點擊來實現(xiàn)操作,很少有人會關(guān)注URL本身吧,所以這個優(yōu)點不算優(yōu)點。
[3]單元測試
從測試上講,MVC框架確實做得不錯,若用MOCK方式測試可以更方便,一個好的WEB應(yīng)用程序設(shè)計就應(yīng)該將頁面呈現(xiàn)與邏輯分開,這點普通ASP.NET應(yīng)用程序也是可以做到的,關(guān)鍵在于設(shè)計。
[4]其它
MVC框架在驗證、母版頁這些地方有幾個新特性,但與普通ASP.NET的方式大同小異,因此不仔細(xì)說了。
【編輯推薦】