ASP.NET MVC 4路線圖

姚琪琳發表於2011-10-26

本翻譯首發於圖靈社群

原文地址:http://aspnet.codeplex.com/wikipage?title=ASP.NET%20MVC%204%20RoadMap

一年的時光悄然而逝,又到了快釋出ASP.NET MVC新版本的時候了。本文件涵蓋了ASP.NET MVC 4框架的高階路線圖。

我們正處於開發ASP.NET MVC 4的早期階段,而這份路線圖是下一版本的計劃文件,清楚這一點是十分重要的。它並不是新特性的規範。我們希望能夠實現這裡列出的大多數或所有特性,但卻無法保證。計劃可能會發生變化,你也可以協助我們改變計劃!請訪問Uservoice網站來提交反饋,這樣我們就能清楚地知道你希望新版本包含哪些內容。

ASP.NET MVC 4開發者預覽版已經可以使用了!要了解此版本的更多資訊,請訪問ASP.NET MVC 4頁面

通過Web Platform installer安裝

  • ASP.NET MVC 4 for Visual Studio 2010

  • ASP.NET MVC 4 for Visual Studio 11 Developer Preview.

或者如果你想直接下載安裝器,可以訪問下載詳細頁面

目標

在深入介紹這些推薦的特性之前,我們先來看看這個版本的整體目標。站得更高,才能看得更遠,我們的目標是使ASP.NET MVC成為最優秀的構建現代富Web應用程式的平臺。因此我們關注ASP.NET MVC 4中的特性(以及整個Web堆疊),這可以使我們離這個目標更近一些。

主題

在計劃特殊的特性之前,ASP.NET小組制定出了一些主題,來指導我們的計劃。有些主題並不特定於ASP.NET MVC的,因此無法在ASP.NET MVC特性小組中單獨實現。我們將與微軟以及微軟以外的人士合作,來實現這些目標。

  • 開發和部署:使開發和部署的流程更加簡單、優秀、快速。
  • 利用平臺:Razor檢視引擎以及ASP.NET MVC 3中一些新的輔助器也可用於ASP.NET Web頁面。我們將在ASP.NET MVC中繼續利用整個Web平臺中的共享特性。
  • Ajax:無論是向現有Web應用程式中新增Ajax,還是實現一個完整的單頁應用程式(如Gmail),我們都將改進ASP.NET MVC中的Ajax開發。我們已經有了一些想法,但現在正處於構建應用程式以暴露和了解那些可以修復的bug這一過程之中。
  • HTML 5、平板和移動裝置:通過簡單地構建一個HTML 5 Web應用程式,來構建平板和移動應用程式,已經成為了產業趨勢。HTML 5應用程式提供了最廣泛的分佈選擇,可以執行於各種各樣的裝置之中。但編寫面向移動和平板裝置的應用程式引擎則需要豐富的經驗。我們希望構建這種應用程式可以變得更加簡單。 -雲:我們要將在雲上(如Windows Azure)部署和承載Web應用程式的任務變得更加簡捷。為了從雲中受益,我們將關注於效能、安全和可擴充套件性。

特性

現在,要開始介紹你最感興趣的部分了——特性!注意,有些特性比其他的要更加豐滿。

Recipses (基於任務的可擴充套件工具)

有些任務要求你操作應用程式的多個部分。例如,要向檢視中新增一個Ajax網格,需要生成檢視程式碼來呈現網格的HTML標記,建立資料訪問類來展示網格,新增控制器類使得Ajax網格可以通過非同步呼叫來獲取資料。 ASP.NET MVC 4 recipe是通過NuGet釋出的一個對話方塊,它包含相關的使用者介面以及用來自動執行某個特殊任務的程式碼。比如,實現一個基於OAuth的認證永遠要比呼叫一個方法複雜得多,因為它需要很多設定和很多UI。而實現OAuth認證的recipe可能會提供一個UI,供你進行設定,然後生成所有需要的程式碼。

示例

以下是一些可以使用recipe實現的想法: - Ajax網格 - 實現基於OAuth的認證 -支援使用Windows Identity Framework的基於宣告的認證

編寫、部署和安裝Recipe

要編寫一個recipe,只需要實現一個使用了recipe API的對話方塊。該對話方塊包含一個MVC專案介面的例項,用起來比EnvDTE.DTE(用來自動化Visual Studio中的任務)要簡單得多。 例如,要向一個ASP.NET MVC專案的某個area中新增一個controller,使用DTE可能需要呼叫多個方法,而recipe API則只需呼叫一個方法。 編寫完這個對話方塊之後,將其打包成NuGet包,這樣大家就可以用你的食譜(recipe)來做菜了。

Recipe實物模型

下面這個實物模型展示了recipe是如何工作的。要啟動一個recipe,可以在Solution Explorer中(或適當的檔案中;一些recipe是位於上下文中的)右擊專案節點,選擇Run Recipe。這將開啟一個選單,有很多recipe可供選擇。(這也可能是Run Recipes上下文選單選項的子選單。) enter image description here

用NuGet安裝的recipe都會顯示在列表中。選中一個並啟動recipe。不同的recipe具有不同的UI。 enter image description here

Recipe可以簡單到只有一個對話方塊(理論上也可以一個對話方塊都沒有),也可以是包含多個步驟的嚮導。點選Finish,使用你指定的設定執行recipe。

Recipe API

對於API來說,其理念是,recipe開發者可以獲取專案介面的例項,該介面包含如何啟動recipe的上下文。它還將在MVC專案系統之上提供一個簡單易用的façade,開發者不必學習整個介面的DTE集合。不過,介面還是可以訪問DTE,以防止專案介面可能不夠充分。

內建的Recipe

作為該專案的一部分,我們計劃構建一些內建的recipe。如前面提到的OAuth支援、Ajax網格、WIF。我們也在尋找其他的想法。

移動支援

移動裝置(手機和平板)從可以瀏覽網站之後就開始愈發流行了。因此要為公眾建立一個網站,你需要考慮能夠為使用小螢幕或可觸屏的訪問者提供什麼樣的體驗。在ASP.NET MVC 4中,我們希望為你提供直接卻靈活的方式,實現一流的移動支援,不管你是建立新網站,還是增強已有的站點。

預設模板的改變

我們對預設專案模板的標記和CSS做了改進,這樣最新建立的專案放在移動裝置上可以和桌面上一樣好看。例如,我們新增了viewport元標記,頁面在小螢幕上也可以佈局得很好,即便頁面專為桌面設計,也不會出現奇怪的放大和縮小。下圖比較了使用新舊模板構建的頁面: enter image description here

新的“Mobile Application”專案模板

另一個正在考慮的改變是專門用於移動和平板Web應用程式的專案模板。該專案模板會包含佈局、檢視和指令碼(如jQuery Mobile),用於構建可提供富使用者體驗和為現代移動裝置進行了優化的應用程式。用該模板構建的頁面可能會如下所示:

enter image description here

針對特殊裝置的檢視

你常常需要剪裁使用者介面以適應使用者的裝置。我們希望能使針對特殊裝置型別的檢視、分部檢視和佈局進行的重寫(override)能變得簡單。無論你是建立全新專案還是將已有專案升級到ASP.NET MVC 4,該特性都能正常工作。

例如,你可以針對移動裝置重寫一個特殊的檢視,只需建立以“.Mobile”為檔名字尾的新檢視即可: enter image description here

我們還可能會提供一個新的基於jQuery Mobile的檢視模板,並增強Add View和Add Controller對話方塊,這樣你就可以為新的或已存在的controller和action快速新增基於jQuery Mobile的檢視重寫。下圖展示了一個Add Controller對話方塊可能的外觀: enter image description here

View type列表中的選項與應用程式使用的檢視引擎無關。檢視轉換時不會改變的那些選項被移到了View Options對話方塊中,如下圖所示:

enter image description here

裝置切換器

很多都網站都為訪問者提供了一種簡單的方式,可以從移動體驗切換到桌面體驗。我們考慮新增一個裝置切換器,它既是呈現適當UI的輔助器(從移動切換到桌面或反之,取決於當前的裝置設定),也是讓使用者決定使用哪種體驗的API。

支援Razor 輔助方法

ASP.NET Web頁面可以在Web應用程式目錄的App_Code資料夾中新增.cshtml或.vbhtml檔案,使用Razor語法來編寫輔助方法。儘管在ASP.NET MVC專案中也可以新增這些檔案,但它們不能訪問ASP.NET MVC上下文物件(如ViewContext)或ASP.NET MVC HtmlHelper例項。

在ASP.NET MVC 4中,我們以一種MVC特定的方式支援了Razor輔助方法。我們還在研究在類庫專案中編寫Razor輔助方法的工具,這樣就可以將它們編譯成庫了。我們可以在其他專案中複用這些庫,並編寫單元測試。

AsyncController類支援Task和Task

用ASP.NET MVC的現有版本編寫非同步action是很困難的。例如,下面的ASP.NET MVC 3程式碼片段展示了一個action方法,它呼叫了兩個不同的非同步服務。

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(或在未來使用支援await關鍵字的C# 5),非同步的action方法就變為:

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打包程式,可以將多個.css和.js檔案合併為一個檔案,通過移除不必要的空白和註釋,可以減少最終的檔案尺寸。這降低了頻寬使用和下載時間,提升了頁面的呈現速度。

其他特性

我們還沒有充實所有需要考慮的特性。下面列出的這些是需要優先實現的。有一些可能需要其他小組釋出。

  • EF Code First Data Migrations,支援從一個資料庫架構版本遷移到另一個,不會丟失資料。
  • 對應用程式程式碼的功能和整合測試提供更好的支援。
  • 支援WCF Web API。
  • 全面地改善Ajax。我們希望減少開發者在ASP.NET MVC中使用Ajax時遇到的困難。
  • 編輯器/顯示模板和HTML輔助方法支援HTML5。例如,在呈現一個DateTime屬性時,編輯器模板將呈現一個type設定為date的input元素,而不是type設定為預設的text的input元素。此外,現有的HTML輔助方法如TextBoxFor也將得到更新,可以根據模型型別呈現適當的input元素。
  • 移動Web專案的模板。
  • 支援Razor檢視中的“donut hole”快取和Windows Server App Fabric快取提供程式。
  • 新的AreaAttribute類,在使用area時提供更好的安全性。

免責宣告

本文件只是一個初步的文件,因此本節在軟體最終釋出之前可能會有重大修改。

本文件中的內容代表了微軟自文件釋出之日起對當前問題的看法。由於微軟需要及時響應不斷變化的市場,因此不能將本文件看成是一種承諾,微軟也無法保證任何資訊的準確性。

這篇White Paper僅供參考。對於文件中出現的資訊,微軟不做任何法律上的擔保、明示、暗示。

遵守所有適用的版權法是使用者的責任。在不限制版權法所規定的權利的前提下,如果沒有微軟的書面許可,不能以任何形式任何方式(電子、機械、影印、錄音或其他)任何目的,對本文件的任何內容進行復制、儲存、引入索引或傳輸。

微軟享有此文件中的專利、專利申請、商標、版權或其他智慧財產權。除非微軟的書面許可中有明確的規定,否則不能使用該文件中的任何專利、商標、版權和其他智慧財產權。

如果沒有額外說明,這裡的公司、組織、產品、域名、e-mail、logo、人、地點、事件等均為虛構,沒有暗示也不能據此推斷任何有關的實際的公司、組織、產品、域名、e-mail、logo、人、地點和事件。

© 2011 Microsoft Corporation. All rights reserved.

本文參加 Translate Geeks to Chinese 翻譯活動

相關文章