.NET 4.5提升了Web開發的生產率
隨著 .NET 4.5 發布日期的日益臨近,微軟已經開始慢慢揭開 下一代開發平臺的神秘面紗。關于 Metro 和 Windows 8已經 有了很多宣傳,而對 .NET 核心特性所作出的改進會在短期內搶了它的風頭,傳統上那會專注于 web、服務和數據開發。
ASP.NET Web Forms 在 .NET framework 的前幾次發布中保持相對穩定,很多開發者市場份額分享給了 ASP.NET MVC。在 .NET 4.5 中,微軟做了大量工作,在 ASP.NET Web Forms 中提供了對模型綁定的支持,從而減少這兩種 web 開發產品之間的生產力差別。這種綁定讓開發者可以在代碼中跳過服務調用和綁定,直接給控件賦值。
盡管這種方法確實節省了時間,但是它并沒有把頁面的渲染和業務邏輯完全分離開: 載入網格的服務方法名稱會嵌入在控件中。
除了 ASP.NET 棧中的模型綁定和其他改善——像提升了的對 HTML 5 的支持、降低了的內存消耗、易于編寫異步代碼的能力——之外,ASP.NET 相關技術還在 Visual Studio 編輯器中享受更豐富的開發體驗。在更引人注目的改善之中,其中之一就是智能任務(Smart Tasks)。在標簽中使用 Ctrl + .(點), 開發者可以使用智能任務來加快開發的速度,而不需要知道關于如何配置給定控件的細節。
其他 Visual Studio 的改進包括: 對于 JavaScript 和 CSS 更智能的支持,還有更精細的調試機制,像頁面檢查工具(Page Inspector tool)。
由于引入了 ASP.NET MVC,它已經能夠以某種形式來提供RESTful 的 web 服務,而在 ASP.NET MVC 的最新版本中,微軟引入了一些 Web API,讓這個概念標準化。Web API 的關鍵特性就是,通過支持 RESTful 的方法來暴露 IQueryable,從而減少開發時間。這種特性能夠幫助開發者創建專門的客戶端查詢,而不需要創建通常需要用來產生有用服務的大量代碼。和其他 .NET 4.5 的改善一樣,這項特性所修改的代碼范圍被降到了最小。
對于以下標準的 API 控制器:
基于 GetProducts ()的 REST 查詢,它會返回所有產品:
http://localhost:8334/api/product
對于以下可查詢 API:
基于 GetProductsByQuery ()的 REST 查詢,它會返回所有成本小于 4 的產品:
http://localhost:8334/api/product?$filter=(cost lt 4)
過濾器會在運行時應用給第二個查詢,從而形成結果。這讓一個方法可以為多個特性服務,而且減少了方法的關注點。對于特定的特性,任何特殊的情況或者副作用都可能需要它自己的實現。
最后,為了管理你需要通過 Web API 暴露的數據,微軟提供了 Entity Framework 5。盡管 Entity Framework 的各種模型已經存在一段時間了(像代碼先行、數據庫先行和實體先行),Entity Framework 5 引入了一種概念,能夠在開發工作的周期內,自動同步模型和數據庫。這會節省很多花費在創建 SQL 變更腳本和管理已經持久化的數據的工作。盡管在包管理控制臺(Package Manager Console)中協調遷移的環節很可靠,但是還是值得學習一下相關的語法。
在代碼先行(Code First)的應用程序中,運行這條命令:
如果“InitialCreate”文件沒有添加到你的遷移目錄中,那么就運行這條命令:
對于給定的模型:
如果我們增加屬性“HasLid”:
我們可以運行另一條命令,使用我們對模型的改變來更新數據庫。
如果你想要回滾所做的變更,只需要運行 add-migration 命令,并確定你想要讓數據庫反映的目標:
盡管這些變更已經被大家廣為接受,認為它能夠改善 .NET 開發者的生產力,但是4.5版本中引入的大量變更還是存在一些問題。Greg Duncan簡要地說明了微軟在 .NET framework 中的速度問題: “我猜你可能會說微軟(或者參與的團隊)是敏捷的,并試圖在每次迭代中做出改善,從過去的經驗學習……? (咳咳……所以我希望至少……咳咳)。”
查看英文原文:.NET 4.5 Raises the Bar for Web Development Productivity