專訪微軟MVP衣明志:走進(jìn)ASP.NET MVC 2框架開發(fā)
原創(chuàng)【51CTO獨家訪談】51CTO開發(fā)頻道一直關(guān)注ASP.NET MVC框架的發(fā)展,并推出過《ASP.NET MVC框架視頻教程》供廣大.NET程序員學(xué)習(xí)。日前微軟已經(jīng)發(fā)布ASP.NET MVC 2框架RC版,究竟這次RC版本的發(fā)布對于WEB開發(fā)者帶來怎樣的改變?以及未來ASP.NET MVC 2正式版還會有哪些改進(jìn)?帶著這樣的問題,我們51CTO記者彭凡專門采訪了微軟MVP衣明志老師。ASP.NET MVC是微軟官方提供的MVC模式編寫ASP.NET WEB應(yīng)用程序的一個框架。
MVP專訪人物介紹
衣明志,蟬聯(lián)五屆微軟MVP,煙臺.NET俱樂部主席,現(xiàn)主要從事.NET平臺下的Web應(yīng)用開發(fā)、解決方案、構(gòu)架設(shè)計及技術(shù)培訓(xùn)等工作。
照片居中者為衣明志老師(51CTO編輯注)
1.與之前的ASP.NET技術(shù)相比,MVC框架給您哪些新的開發(fā)體驗?ASP.NET MVC框架都能在哪些方面提高Web開發(fā)的效率?
衣明志老師:其實ASP.NET MVC也是ASP.NET技術(shù),并不能把它從ASP.NET中剝離出來。MVC是個將一個應(yīng)用的實現(xiàn)分成三個組件角色的框架技術(shù):模型,視圖和控制器。而ASP.NET MVC是基于ASP.NET技術(shù)的MVC實現(xiàn),所以基礎(chǔ)層面的東西幾乎是一樣的。
ASP.NET MVC促進(jìn)了清晰的關(guān)注分離,具備高度的可測試性、可擴(kuò)展性和可插拔性。ASP.NET MVC包含了強(qiáng)大的URL映射組件和HTML Helper類,可以使用很干凈的URL和前端頁面代碼來創(chuàng)建WEB應(yīng)用。
MVC的關(guān)注分離特點,使得團(tuán)隊協(xié)作開發(fā)變的更加協(xié)調(diào),減少了大量不必要的麻煩。ASP.NET MVC相對于ASP.NET WebForm 前端代碼(HTML、JS、CSS等)可控制力方面有了很大加強(qiáng),使得我們在做互聯(lián)網(wǎng)應(yīng)用尤其是web2.0應(yīng)用時變的更加得心應(yīng)手。結(jié)合Visual Studio 2008/2010的支持,我們可以簡單的生成常用的“創(chuàng)建”,“修改”、“詳細(xì)信息”、“列表”等頁面和相應(yīng)的Controller,很大程度上提高了開發(fā)Web應(yīng)用尤其是互聯(lián)網(wǎng)Web應(yīng)用的體驗和效率。
2.ASP.NET MVC框架的***版發(fā)布已經(jīng)有些時間,在您的使用過程中,感覺有哪些需要改進(jìn)的地方?最近發(fā)布的MVC 2 RC版,是否改進(jìn)了這些問題?
ASP.NET MVC 1很早就發(fā)布了,得到較廣泛的應(yīng)用和不少好評。但作為***個版本的MVC框架,在很多方面是需要改進(jìn)的。 例如說,缺乏對業(yè)務(wù)對象的數(shù)據(jù)驗證支持、不支持應(yīng)用分區(qū)(如,后臺管理我們一般放在admin目錄里)等。
在前端時間發(fā)布的ASP.NET MVC 2 RC版中,我們很驚喜地發(fā)現(xiàn)上述問題基本都有了對應(yīng)的解決。新版本MVC已經(jīng)開始支持 服務(wù)器端和客戶端數(shù)據(jù)驗證、Areas等特性。
3.ASP.NET MVC 2 RC版的發(fā)布給我們帶來了許多新功能特性,您最感興趣的是其中的那幾項?我們看到ASP.NET MVC 2中有了強(qiáng)類型的HTML輔助方法的支持,這樣的改進(jìn)對于開發(fā)人員意味著什么?
ASP.NET MVC 2 RC的發(fā)布確實給我們帶來了許多新特性,主要包含如下這些:
◆新的強(qiáng)類型HTML輔助方法
◆服務(wù)器和客戶端數(shù)據(jù)驗證支持
◆自定義模板的UI輔助方法
◆支持對應(yīng)用分區(qū)(Areas)
◆支持異步的Controller
◆使用Html.RenderAction把一個Action渲染在頁面的局部
◆大量新的輔助方法、API等
◆改進(jìn)了Visual Studio的支持
說實話我個人對新特性都很感興趣,而相對來說對數(shù)據(jù)驗證、Areas、異步Controller和部分新的輔助方法更感興趣一些。
新增的強(qiáng)類型HTML Helper,是很不錯的東西。比如我們可以使用:
- <%= Html.TextBoxFor(model=>model.Title) %>
代替之前的:
- <%= Html.TextBoxFor(“Title”,Model.Title) %>
這兩個方法其實最終渲染出來的HTML是完全相同的,但是新的強(qiáng)類型輔助方法卻使得我們可以在編譯時就發(fā)現(xiàn)視圖缺陷而不必等到運行時,畢竟運行時檢查錯誤可能會不夠徹底。對于使用ASP.NET MVC 2的開發(fā)人員來說,應(yīng)該盡可能使用強(qiáng)類型的輔助方法,以提高應(yīng)用質(zhì)量。
4.ASP.NET MVC 2可以運行在VS 2008和VS 2010上,您推薦的是哪個版本?VS 2010在哪些方面能更好的支持ASP.NET MVC 2的開發(fā)?
ASP.NET MVC 2 RC目前對Visual Studio 2010還不直接支持,所以目前還只能在VS2008下做正常的開發(fā)。支持VS2010的ASP.NET MVC 應(yīng)該很快會有新的發(fā)布出來,大家可以專注一下。VS2010給開發(fā)人員提供了大量新的特性和功能,例如:改進(jìn)的智能提示 (尤其是對JavaScript的智能提示)、對.Net 4的先天支持等。VS2010的這些新特性會很大程度上提高開發(fā)體驗,所以對有條件的開發(fā)人員來說,我推薦使用VS2010來做ASP.NET MVC 2的web開發(fā),當(dāng)然這還得再等幾天。
5.對于數(shù)據(jù)驗證,是ASP.NET MVC框架中永恒的話題。您是怎么看ASP.NET MVC 2中對于數(shù)據(jù)驗證方面的改進(jìn)的?
ASP.NET MVC 2 RC在數(shù)據(jù)驗證方面做了很不錯的增強(qiáng),可以直接使用System.ComponentModel.DataAnnotations 下的RequiredAttribute、RangeAttribute等特殊的Attribute來設(shè)置驗證規(guī)則,非常方便。而且這個驗證規(guī)則還是穿透服務(wù)器端和客戶端的,這很大程度上滿足了對數(shù)據(jù)驗證的基本需求。如果客戶端能夠直接支持jquery的驗證庫,而不是必須使用Microsoft的驗證庫就更好了,呵呵
6.大家一直對ASP.NET MVC中的T4支持還不太理解,這樣一個文本模板轉(zhuǎn)換工具箱對于WEB開發(fā)人員究竟有何益處?
嗯,你的問題很好。T4,即the Text Templating Transformation Toolkit(文本模板轉(zhuǎn)換工具箱),是一種高度定制化的基于模板的文本生成器。而ASP.NET MVC對Visual Studio的增強(qiáng)支持方面就包含了T4的使用,這被很多開發(fā)人員忽略了。其實T4的使用在ASP.NET MVC的使用中是蠻重要的,比如我們使用Visual Studio做ASP.NET MVC開發(fā)時,需要向View目錄添加View(視圖)文件。添加View的界面上允許用戶選擇創(chuàng)建強(qiáng)類型視圖,這時可以看到“View content”的下拉列表中,會有默認(rèn)的Create、Details、Edit、Empty、List 等5個選項,選定一個后點擊“Add”按鈕時,Visual Studio可以根據(jù)選擇的View data class的信息,自動生成相應(yīng)的View頁面,很方便。而 “View content”的下拉列表項其實都是預(yù)訂好的T4模板文件的名稱而已,生成View文件的過程其實是T4的執(zhí)行過程,這些View 的T4模板文件存儲在Visual Studio安裝目錄下的一個特殊文件夾里。Controller文件的生成其實也是如此。
為什么我讓大家在ASP.NET MVC 2里重視一下這個問題呢?其實細(xì)心的人,可以已經(jīng)發(fā)現(xiàn)了MVC2里的默認(rèn)View的模板內(nèi)容有所變化了。比如說ASP.NET MVC 1.0時Create的默認(rèn)視圖中每個屬性的模板樣式類似下面這樣:
- <p>
- <label for="Title"> Title:label>
- <%= Html.TextBox("Title ") %>
- <%= Html.ValidationMessage("Title ", "*") %>
- p>
而在ASP.NET MVC 2里變成如下樣式了:
- <div class="editor-label">
- <%= Html.LabelFor(model => model.Title) %>
- div>
- <div class="editor-field">
- <%= Html.TextBoxFor(model => model.Title) %>
- <%= Html.ValidationMessageFor(model => model.Title) %>
- div>
這兩個視圖代碼出來的結(jié)果顯然是不太一樣的,假如你項目原來用的是ASP.NET MVC 1.0,現(xiàn)在要升級成ASP.NET MVC 2的,那么新添加的視圖就跟原來的樣子有所不同了,如果你對原來的視圖還有運行了一些相應(yīng)的js,那么可能你就會開始郁悶了,怎么辦?就是在項目中使用舊模板來生成原來的視圖文件。
當(dāng)然在默認(rèn)的View模板不能滿足你的項目需求時,你也可以利用T4模板創(chuàng)建新的View模板,并在Visual Studio中得以體現(xiàn)。具體的使用方法我稍后會寫一篇專門的博客跟大家分享這部分的內(nèi)容。
7.在ASP.NET MVC 2中對于Area功能的增強(qiáng),這樣的增強(qiáng)是如何在同一個項目中更好地組織應(yīng)用程序的?
ASP.NET MVC 1.0時,如果我們要在一個項目中做自己網(wǎng)站的后臺應(yīng)用,而又保持URL的整潔性,是很困難的,那需要你自己做很多工作來,通過自有的方式實現(xiàn)Area的功能,效果可能還不那么好,因為默認(rèn)情況下Controller是不區(qū)分命名空間的。例如:前臺可能有這樣的地址:http://testhost/News/List,而你希望在后臺的News管理列表的Url是:http://testhost/admin/News/List,這幾乎是不可能完成的任務(wù),讓我們非常困擾。
#T#
ASP.NET MVC 2添加了Areas的支持,解決上述問題我們就可以添加一個Area,名字叫做“admin”,這時項目中就有了一個Areas文件夾,里面是admin文件夾,admin里面包含了Controllers、Models、Views三個目錄和一個名叫的AreaRegistration.cs文件,然后我們在Global.asa.cs文件中的routes.MapRoute前加一行AreaRegistration.RegisterAllAreas();
就搞定了。這樣不同區(qū)域的應(yīng)用在不同Area目錄里進(jìn)行獨立的組織管理,相當(dāng)不錯。
8.您認(rèn)為目前WEB企業(yè)級開發(fā)***的障礙在哪一方面?如何運用ASP.NET MVC框架來減輕程序員在這一障礙上的壓力?
51CT O曾經(jīng)對我做過一次視頻采訪,那次我談到過這個這方面的一些內(nèi)容,但是由于標(biāo)題和部分表述的原因,可能被一些程序員誤解了我的意思。其實就像ASP.NET MVC 2相對于ASP.NET MVC 1.0來說,做了這么多的改進(jìn),改進(jìn)的目標(biāo)是什么呢?很大程度上就是減少不必要的勞動量和潛在風(fēng)險,提高生產(chǎn)力,讓開發(fā)人員的精力更多放到業(yè)務(wù)處理方面(我提到的業(yè)務(wù)均不是市場人員所說的業(yè)務(wù))。所以Web的企業(yè)級開發(fā)往往***的障礙是開發(fā)人員把太多精力浪費在了非業(yè)務(wù)核心的方面,比如說數(shù)據(jù)驗證、UI代碼的編寫和一些繁瑣但沒什么技術(shù)含量的工作方面。
新版的ASP.NET MVC的很多新特性都減輕了開發(fā)人員不少的工作壓力,比如說Html.EditForModel方法,可以直接在View中生成很不錯的編輯界面,而且有自動識別能力:bool型的屬性,對應(yīng)的自動生成CheckBox;枚舉類型自動生成下拉列表等等。而Controller、Action、Filter等都給我們帶來很多類似的自動機(jī)制,減少了很多繁瑣無味的工作,使我們可以把更多精力放到核心工作方面去。
ASP.NET MVC延伸閱讀
ASP.NET MVC是微軟官方提供的MVC模式編寫ASP.NET Web應(yīng)用程序的一個框架。
它由Castle的MonoRail而來.目前已經(jīng)歷經(jīng)數(shù)個版本。ASP.NET MVC中的MVC本來是存在于Desktop程序中的,M是指數(shù)據(jù)模型,V是指用戶界面,C則是控制器。使用MVC的目的是將M和V的實現(xiàn)代碼分離,從而使同一個程序可以使用不同的表現(xiàn)形式。比如一批統(tǒng)計數(shù)據(jù)你可以分別用柱狀圖、餅圖來表示。C存在的目的則是確保M和V的同步,一旦M改變,V應(yīng)該同步更新。
MVC模式圖
ASP.NET MVC框架是既ASP.NET WebForms后的又一種開發(fā)方式。它提供了一系列優(yōu)秀特性,使ASP.NET開發(fā)人員擁有了另一個選擇。ASP.NET MVC框架選項非常干凈,而且容易使用。它將允許你在應(yīng)用中輕易地保持關(guān)注分離,且有助于進(jìn)行干凈的測試和TDD。了解更多關(guān)于ASP.NET MVC框架,請訪問51CTO《ASP.NET MVC框架視頻教程》專題。