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