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