ASP.NET MVC 4路線圖
原文地址:http://aspnet.codeplex.com/wikipage?title=ASP.NET%20MVC%204%20RoadMap
本文首發(fā)于圖靈社區(qū)
一年的時(shí)光悄然而逝,又到了快發(fā)布ASP.NET MVC新版本的時(shí)候了。本文檔涵蓋了ASP.NET MVC 4框架的高級(jí)路線圖。
我們正處于開(kāi)發(fā)ASP.NET MVC 4的早期階段,而這份路線圖是下一版本的計(jì)劃文檔,清楚這一點(diǎn)是十分重要的。它并不是新特性的規(guī)范。我們希望能夠?qū)崿F(xiàn)這里列出的大多數(shù)或所有特性,但卻無(wú)法保證。計(jì)劃可能會(huì)發(fā)生變化,你也可以協(xié)助我們改變計(jì)劃!請(qǐng)?jiān)L問(wèn)Uservoice網(wǎng)站來(lái)提交反饋,這樣我們就能清楚地知道你希望新版本包含哪些內(nèi)容。
ASP.NET MVC 4開(kāi)發(fā)者預(yù)覽版已經(jīng)可以使用了!要了解此版本的更多信息,請(qǐng)?jiān)L問(wèn)ASP.NET MVC 4頁(yè)面。
通過(guò)Web Platform installer安裝
或者如果你想直接下載安裝器,可以訪問(wèn)下載詳細(xì)頁(yè)面。
目標(biāo)
在深入介紹這些推薦的特性之前,我們先來(lái)看看這個(gè)版本的整體目標(biāo)。站得更高,才能看得更遠(yuǎn),我們的目標(biāo)是使ASP.NET MVC成為最優(yōu)秀的構(gòu)建現(xiàn)代富Web應(yīng)用程序的平臺(tái)。因此我們關(guān)注ASP.NET MVC 4中的特性(以及整個(gè)Web堆棧),這可以使我們離這個(gè)目標(biāo)更近一些。
主題
在計(jì)劃特殊的特性之前,ASP.NET小組制定出了一些主題,來(lái)指導(dǎo)我們的計(jì)劃。有些主題并不特定于ASP.NET MVC的,因此無(wú)法在ASP.NET MVC特性小組中單獨(dú)實(shí)現(xiàn)。我們將與微軟以及微軟以外的人士合作,來(lái)實(shí)現(xiàn)這些目標(biāo)。
- 開(kāi)發(fā)和部署:使開(kāi)發(fā)和部署的流程更加簡(jiǎn)單、優(yōu)秀、快速。
- 利用平臺(tái):Razor視圖引擎以及ASP.NET MVC 3中一些新的輔助器也可用于ASP.NET Web頁(yè)面。我們將在ASP.NET MVC中繼續(xù)利用整個(gè)Web平臺(tái)中的共享特性。
- Ajax:無(wú)論是向現(xiàn)有Web應(yīng)用程序中添加Ajax,還是實(shí)現(xiàn)一個(gè)完整的單頁(yè)應(yīng)用程序(如Gmail),我們都將改進(jìn)ASP.NET MVC中的Ajax開(kāi)發(fā)。我們已經(jīng)有了一些想法,但現(xiàn)在正處于構(gòu)建應(yīng)用程序以暴露和了解那些可以修復(fù)的bug這一過(guò)程之中。
- HTML 5、平板和移動(dòng)設(shè)備:通過(guò)簡(jiǎn)單地構(gòu)建一個(gè)HTML 5 Web應(yīng)用程序,來(lái)構(gòu)建平板和移動(dòng)應(yīng)用程序,已經(jīng)成為了產(chǎn)業(yè)趨勢(shì)。HTML 5應(yīng)用程序提供了最廣泛的分布選擇,可以運(yùn)行于各種各樣的設(shè)備之中。但編寫面向移動(dòng)和平板設(shè)備的應(yīng)用程序引擎則需要豐富的經(jīng)驗(yàn)。我們希望構(gòu)建這種應(yīng)用程序可以變得更加簡(jiǎn)單。
- 云:我們要將在云上(如Windows Azure)部署和承載Web應(yīng)用程序的任務(wù)變得更加簡(jiǎn)捷。為了從云中受益,我們將關(guān)注于性能、安全和可擴(kuò)展性。
特性
現(xiàn)在,要開(kāi)始介紹你最感興趣的部分了——特性!注意,有些特性比其他的要更加豐滿。
Recipses (基于任務(wù)的可擴(kuò)展工具)
有些任務(wù)要求你操作應(yīng)用程序的多個(gè)部分。例如,要向視圖中添加一個(gè)Ajax網(wǎng)格,需要生成視圖代碼來(lái)呈現(xiàn)網(wǎng)格的HTML標(biāo)記,創(chuàng)建數(shù)據(jù)訪問(wèn)類來(lái)展示網(wǎng)格,添加控制器類使得Ajax網(wǎng)格可以通過(guò)異步調(diào)用來(lái)獲取數(shù)據(jù)。
ASP.NET MVC 4 recipe是通過(guò)NuGet發(fā)布的一個(gè)對(duì)話框,它包含相關(guān)的用戶界面以及用來(lái)自動(dòng)執(zhí)行某個(gè)特殊任務(wù)的代碼。比如,實(shí)現(xiàn)一個(gè)基于OAuth的認(rèn)證永遠(yuǎn)要比調(diào)用一個(gè)方法復(fù)雜得多,因?yàn)樗枰芏嘣O(shè)置和很多UI。而實(shí)現(xiàn)OAuth認(rèn)證的recipe可能會(huì)提供一個(gè)UI,供你進(jìn)行設(shè)置,然后生成所有需要的代碼。
示例
以下是一些可以使用recipe實(shí)現(xiàn)的想法:
- Ajax網(wǎng)格
- 實(shí)現(xiàn)基于OAuth的認(rèn)證
- 支持使用Windows Identity Framework的基于聲明的認(rèn)證
編寫、部署和安裝Recipe
要編寫一個(gè)recipe,只需要實(shí)現(xiàn)一個(gè)使用了recipe API的對(duì)話框。該對(duì)話框包含一個(gè)MVC項(xiàng)目接口的實(shí)例,用起來(lái)比EnvDTE.DTE(用來(lái)自動(dòng)化Visual Studio中的任務(wù))要簡(jiǎn)單得多。
例如,要向一個(gè)ASP.NET MVC項(xiàng)目的某個(gè)area中添加一個(gè)controller,使用DTE可能需要調(diào)用多個(gè)方法,而recipe API則只需調(diào)用一個(gè)方法。
編寫完這個(gè)對(duì)話框之后,將其打包成NuGet包,這樣大家就可以用你的食譜(recipe)來(lái)做菜了。
Recipe實(shí)物模型
下面這個(gè)實(shí)物模型展示了recipe是如何工作的。要啟動(dòng)一個(gè)recipe,可以在Solution Explorer中(或適當(dāng)?shù)奈募校灰恍﹔ecipe是位于上下文中的)右擊項(xiàng)目節(jié)點(diǎn),選擇Run Recipe。這將打開(kāi)一個(gè)菜單,有很多recipe可供選擇。(這也可能是Run Recipes上下文菜單選項(xiàng)的子菜單。)

用NuGet安裝的recipe都會(huì)顯示在列表中。選中一個(gè)并啟動(dòng)recipe。不同的recipe具有不同的UI。

Recipe可以簡(jiǎn)單到只有一個(gè)對(duì)話框(理論上也可以一個(gè)對(duì)話框都沒(méi)有),也可以是包含多個(gè)步驟的向?qū)А|c(diǎn)擊Finish,使用你指定的設(shè)置運(yùn)行recipe。
Recipe API
對(duì)于API來(lái)說(shuō),其理念是,recipe開(kāi)發(fā)者可以獲取項(xiàng)目接口的實(shí)例,該接口包含如何啟動(dòng)recipe的上下文。它還將在MVC項(xiàng)目系統(tǒng)之上提供一個(gè)簡(jiǎn)單易用的fa?ade,開(kāi)發(fā)者不必學(xué)習(xí)整個(gè)接口的DTE集合。不過(guò),接口還是可以訪問(wèn)DTE,以防止項(xiàng)目接口可能不夠充分。
內(nèi)置的Recipe
作為該項(xiàng)目的一部分,我們計(jì)劃構(gòu)建一些內(nèi)置的recipe。如前面提到的OAuth支持、Ajax網(wǎng)格、WIF。我們也在尋找其他的想法。
移動(dòng)支持
移動(dòng)設(shè)備(手機(jī)和平板)從可以瀏覽網(wǎng)站之后就開(kāi)始愈發(fā)流行了。因此要為公眾建立一個(gè)網(wǎng)站,你需要考慮能夠?yàn)槭褂眯∑聊换蚩捎|屏的訪問(wèn)者提供什么樣的體驗(yàn)。在ASP.NET MVC 4中,我們希望為你提供直接卻靈活的方式,實(shí)現(xiàn)一流的移動(dòng)支持,不管你是創(chuàng)建新網(wǎng)站,還是增強(qiáng)已有的站點(diǎn)。
默認(rèn)模板的改變
我們對(duì)默認(rèn)項(xiàng)目模板的標(biāo)記和CSS做了改進(jìn),這樣最新創(chuàng)建的項(xiàng)目放在移動(dòng)設(shè)備上可以和桌面上一樣好看。例如,我們添加了viewport元標(biāo)記,頁(yè)面在小屏幕上也可以布局得很好,即便頁(yè)面專為桌面設(shè)計(jì),也不會(huì)出現(xiàn)奇怪的放大和縮小。下圖比較了使用新舊模板構(gòu)建的頁(yè)面:

新的“Mobile Application”項(xiàng)目模板
另一個(gè)正在考慮的改變是專門用于移動(dòng)和平板Web應(yīng)用程序的項(xiàng)目模板。該項(xiàng)目模板會(huì)包含布局、視圖和腳本(如jQuery Mobile),用于構(gòu)建可提供富用戶體驗(yàn)和為現(xiàn)代移動(dòng)設(shè)備進(jìn)行了優(yōu)化的應(yīng)用程序。用該模板構(gòu)建的頁(yè)面可能會(huì)如下所示:

針對(duì)特殊設(shè)備的視圖
你常常需要剪裁用戶界面以適應(yīng)用戶的設(shè)備。我們希望能使針對(duì)特殊設(shè)備類型的視圖、分部視圖和布局進(jìn)行的重寫(override)能變得簡(jiǎn)單。無(wú)論你是創(chuàng)建全新項(xiàng)目還是將已有項(xiàng)目升級(jí)到ASP.NET MVC 4,該特性都能正常工作。
例如,你可以針對(duì)移動(dòng)設(shè)備重寫一個(gè)特殊的視圖,只需創(chuàng)建以“.Mobile”為文件名后綴的新視圖即可:

我們還可能會(huì)提供一個(gè)新的基于jQuery Mobile的視圖模板,并增強(qiáng)Add View和Add Controller對(duì)話框,這樣你就可以為新的或已存在的controller和action快速添加基于jQuery Mobile的視圖重寫。下圖展示了一個(gè)Add Controller對(duì)話框可能的外觀:

View type列表中的選項(xiàng)與應(yīng)用程序使用的視圖引擎無(wú)關(guān)。視圖轉(zhuǎn)換時(shí)不會(huì)改變的那些選項(xiàng)被移到了View Options對(duì)話框中,如下圖所示:

設(shè)備切換器
很多都網(wǎng)站都為訪問(wèn)者提供了一種簡(jiǎn)單的方式,可以從移動(dòng)體驗(yàn)切換到桌面體驗(yàn)。我們考慮添加一個(gè)設(shè)備切換器,它既是呈現(xiàn)適當(dāng)UI的輔助器(從移動(dòng)切換到桌面或反之,取決于當(dāng)前的設(shè)備設(shè)置),也是讓用戶決定使用哪種體驗(yàn)的API。
支持Razor 輔助方法
ASP.NET Web頁(yè)面可以在Web應(yīng)用程序目錄的App_Code文件夾中添加.cshtml或.vbhtml文件,使用Razor語(yǔ)法來(lái)編寫輔助方法。盡管在ASP.NET MVC項(xiàng)目中也可以添加這些文件,但它們不能訪問(wèn)ASP.NET MVC上下文對(duì)象(如ViewContext)或ASP.NET MVC HtmlHelper實(shí)例。
在ASP.NET MVC 4中,我們以一種MVC特定的方式支持了Razor輔助方法。我們還在研究在類庫(kù)項(xiàng)目中編寫Razor輔助方法的工具,這樣就可以將它們編譯成庫(kù)了。我們可以在其他項(xiàng)目中復(fù)用這些庫(kù),并編寫單元測(cè)試。
AsyncController類支持Task和Task<T>
用ASP.NET MVC的現(xiàn)有版本編寫異步action是很困難的。例如,下面的ASP.NET MVC 3代碼片段展示了一個(gè)action方法,它調(diào)用了兩個(gè)不同的異步服務(wù)。
public void IndexAsync(string city) { AsyncManager.OutstandingOperations.Increment(2); NewsService newsService = new NewsService(); newsService.GetHeadlinesCompleted += (sender, e) => { AsyncManager.Parameters["headlines"] = e.Value; AsyncManager.OutstandingOperations.Decrement(); }; newsService.GetHeadlinesAsync(); SportsService sportsService = new SportsService(); sportsService.GetScoresCompleted += (sender, e) => { AsyncManager.Parameters["scores"] = e.Value; AsyncManager.OutstandingOperations.Decrement(); }; sportsService.GetScoresAsync(); } public ActionResult IndexCompleted(string[] headlines, string[] scores, string[] forecast) { return View("Common", new PortalViewModel { NewsHeadlines = headlines, SportsScores = scores, }); }
而使用ASP.NET MVC 4和Visual Studio Async CTP(或在未來(lái)使用支持await關(guān)鍵字的C# 5),異步的action方法就變?yōu)椋?/p>
public async Task<ActionResult> Index(string city) { var newsService = new NewsService(); var sportsService = new SportsService(); return View("Common", new PortalViewModel { NewsHeadlines = await newsService.GetHeadlinesAsync(), SportsScores = await sportsService.GetScoresAsync() }); }
CSS和JavaScript打包集成
ASP.NET MVC 4將包含CSS和JavaScript打包程序,可以將多個(gè).css和.js文件合并為一個(gè)文件,通過(guò)移除不必要的空白和注釋,可以減少最終的文件尺寸。這降低了帶寬使用和下載時(shí)間,提升了頁(yè)面的呈現(xiàn)速度。
其他特性
我們還沒(méi)有充實(shí)所有需要考慮的特性。下面列出的這些是需要優(yōu)先實(shí)現(xiàn)的。有一些可能需要其他小組發(fā)布。
- EF Code First Data Migrations,支持從一個(gè)數(shù)據(jù)庫(kù)架構(gòu)版本遷移到另一個(gè),不會(huì)丟失數(shù)據(jù)。
- 對(duì)應(yīng)用程序代碼的功能和集成測(cè)試提供更好的支持。
- 支持WCF Web API。
- 全面地改善Ajax。我們希望減少開(kāi)發(fā)者在ASP.NET MVC中使用Ajax時(shí)遇到的困難。
- 編輯器/顯示模板和HTML輔助方法支持HTML5。例如,在呈現(xiàn)一個(gè)DateTime屬性時(shí),編輯器模板將呈現(xiàn)一個(gè)type設(shè)置為date的input元素,而不是type設(shè)置為默認(rèn)的text的input元素。此外,現(xiàn)有的HTML輔助方法如TextBoxFor也將得到更新,可以根據(jù)模型類型呈現(xiàn)適當(dāng)?shù)膇nput元素。
- 移動(dòng)Web項(xiàng)目的模板。
- 支持Razor視圖中的“donut hole”緩存和Windows Server App Fabric緩存提供程序。
- 新的AreaAttribute類,在使用area時(shí)提供更好的安全性。
免責(zé)聲明
本文檔只是一個(gè)初步的文檔,因此本節(jié)在軟件最終發(fā)布之前可能會(huì)有重大修改。
本文檔中的內(nèi)容代表了微軟自文檔發(fā)布之日起對(duì)當(dāng)前問(wèn)題的看法。由于微軟需要及時(shí)響應(yīng)不斷變化的市場(chǎng),因此不能將本文檔看成是一種承諾,微軟也無(wú)法保證任何信息的準(zhǔn)確性。
這篇White Paper僅供參考。對(duì)于文檔中出現(xiàn)的信息,微軟不做任何法律上的擔(dān)保、明示、暗示。
遵守所有適用的版權(quán)法是用戶的責(zé)任。在不限制版權(quán)法所規(guī)定的權(quán)利的前提下,如果沒(méi)有微軟的書面許可,不能以任何形式任何方式(電子、機(jī)械、復(fù)印、錄音或其他)任何目的,對(duì)本文檔的任何內(nèi)容進(jìn)行復(fù)制、存儲(chǔ)、引入索引或傳輸。
微軟享有此文檔中的專利、專利申請(qǐng)、商標(biāo)、版權(quán)或其他知識(shí)產(chǎn)權(quán)。除非微軟的書面許可中有明確的規(guī)定,否則不能使用該文檔中的任何專利、商標(biāo)、版權(quán)和其他知識(shí)產(chǎn)權(quán)。
如果沒(méi)有額外說(shuō)明,這里的公司、組織、產(chǎn)品、域名、e-mail、logo、人、地點(diǎn)、事件等均為虛構(gòu),沒(méi)有暗示也不能據(jù)此推斷任何有關(guān)的實(shí)際的公司、組織、產(chǎn)品、域名、e-mail、logo、人、地點(diǎn)和事件。
? 2011 Microsoft Corporation. All rights reserved.
浙公網(wǎng)安備 33010602011771號(hào)