細數ASP.NET MVC框架的7大頂級功能
ASP.NET MVC框架對構建ASP.NET應用程序的開發人員來說的確很有吸引力,因為它的松耦合特征使項目管理變得更加輕松,ASP.NET MVC最初由微軟隨.NET framework 3.5 SP1一起引入(即ASP.NET MVC 1.0),現在.NET Framework 4.0和Visual Studio 2010默認支持第二個版本,即ASP.NET MVC 2.0,在這篇文章中,我將帶你領略一下ASP.NET MVC框架的7個頂級功能。
所有概念都圍繞下面三個主要組件展開:
· 模型(用M表示):模型是負責表現底層數據庫模式的業務對象,容納MVC應用程序的數據/狀態。
· 視圖(用V表示):視圖指的是應用程序的UI,在ASP.NET MVC應用程序中,它通常就是一個.aspx和.ascx文件。
· 控制器(用C表示):控制器是ASP.NET MVC框架應用程序的核心,它負責給客戶端呈現適當的視圖,執行相關的行為方法,從模型獲取數據,然后填充到視圖,或從視圖獲取數據,然后更新模型等。
圖1展示了MVC模式三大組件之間的相互關系。
圖 1 MVC框架的三個組件
1、打通并行開發的任督二脈
當你在Visual Studio 2010中創建ASP.NET MVC應用程序時,你會發現在Visual Studio IDE的解決方案下自動創建了Controller(控制器),View(視圖)和Model(模型)三個文件夾,模型,控制器和視圖必須分離成不同的文件,圖2顯示了一個解決方案資源管理器屏幕截圖。
圖 2 ASP.NET MVC應用程序解決方案資源管理器樹形結構
在大多數組織中,有單獨負責界面設計的UI團隊,負責編寫核心.NET代碼的開發團隊,也有數據團隊(管理數據模型),這種松耦合組織架構的主要優點是,允許不同的團隊在自己的領域工作,相互依賴性很低,例如,對于UI團隊,他們只管視圖,對于背后隱藏的代碼完全不用關心,那些事情有開發團隊來處理。
因此,ASP.NET MVC框架降低了并行開發的復雜性。
2、URL路由,控制器響應請求
和一般的ASP.NET應用程序不一樣,ASP.NET MVC應用程序請求不是由磁盤上的文件,如.aspx文件產生的,而是由控制器直接產生的,下面是一個請求URL格式示例:
入站請求將會觸發URL指定控制器的ActionMethod(行為方法),例如,請求將被路由到相應控制器的行為方法,該方法將負責呈現結果視圖,為什么和開發人員有關系呢?下面就是答案:
· 和REST風格的URL結構類似,這也導致用戶可以輕易操作URL。
· 使應用程序對搜索引擎友好,在現代Web應用程序開發中,這被認為是很重要的。
是什么讓這個URL驅動架構成為可能呢?秘密就在global.asax文件中,看看下面的代碼:
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional }
// Parameter defaults
);
}
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
RegisterRoutes(RouteTable.Routes);
}
}
在上面的代碼中,你可能已經注意到如何注冊URL路由,以及如何指定默認值。
3、支持測試驅動開發
由于MVC架構是松散的,構建單元測試用例變得很簡單,它使測試驅動開發成為可能,例如,如果你有一個正常的.aspx.cs頁面,你想為它建立單元測試用例,復雜度很高,因為:
· 你必須為你的頁面代碼隱藏類創建實例;
· 隱藏代碼將指向ASP.NET控件;
· 為事件(如GridView_RowDataBound)創建單元測試用例很困難。
在MVC模式下,文件背后沒有任何代碼,也沒有UI元素引用,使任務變得非常容易,你需要做的僅僅是指向控制器的ActionMethod,點擊右鍵選擇“創建單元測試”,如圖3所示。
圖 3 創建單元測試
4、HTML輔助方法的可用性
ASP.NET MVC視圖是由HTML驅動的,你不用使用任何ASP.NET服務器控件,ASP.NET MVC為此專門提供一堆HTML輔助方法,使視圖開發任務變得更簡單,最爽的是開發人員可以獲得這些HTML輔助方法的100%智能提示,圖4顯示了一個示例屏幕截圖。
圖 4 HTML輔助方法智能提示
在上面的屏幕截圖中,你可能注意到了復選框(checkbox)和文本框(textbox)等部分的Lambda表達式,創建輔助方法指定控件是為注入模型的特定字段創建的。
5、ASP.NET MVC CRUD實現:腳手架可用性
在日常的應用程序開發中,開發人員花在寫代碼上的時間是最多的,但大多數時候都是重復做數據項的創建(C)、讀取(R)、更新(U)和刪除(D)操作,ASP.NET MVC框架為CRUD操作提供了一個腳手架,當你創建控制器時,你可以選擇讓框架幫你創建好CRUD操作的行為方法,如圖5所示。
圖 5 為CRUD操作添加行為方法
下面是生成的代碼示例:
{
//
// GET: /My/
public ActionResult Index()
{
return View();
}
//
// GET: /My/Details/5
public ActionResult Details(int id)
{
return View();
}
//
// GET: /My/Create
public ActionResult Create()
{
return View();
}
//
// POST: /My/Create
[HttpPost]
public ActionResult Create(FormCollection collection)
{
try
{
// TODO: Add insert logic here
return RedirectToAction("Index");
}
catch
{
return View();
}
}
//
// GET: /My/Edit/5
public ActionResult Edit(int id)
{
return View();
}
//
// POST: /My/Edit/5
[HttpPost]
public ActionResult Edit(int id, FormCollection collection)
{
try
{
// TODO: Add update logic here
return RedirectToAction("Index");
}
catch
{
return View();
}
}
//
// GET: /My/Delete/5
public ActionResult Delete(int id)
{
return View();
}
//
// POST: /My/Delete/5
[HttpPost]
public ActionResult Delete(int id, FormCollection collection)
{
try
{
// TODO: Add delete logic here
return RedirectToAction("Index");
}
catch
{
return View();
}
}
}
6、模板功能
模板功能是ASP.NET MVC 2.0版本才引入的新功能,此功能允許你創建一個共享的局部視圖,可以在其它視圖中直接使用它,用于編輯模板功能的HTML輔助方法有:Html.EditorFor,Html.Editor和 Html.EditorForModel。
7、使用數據注釋屬性進行驗證
ASP.NET MVC框架提供了一些數據注釋屬性用于數據驗證,這些屬性用來裝飾模型暴露的字段,下面是其中一部分屬性:
· Required
· DisplayName
· StringLength
· ScaffoldColumn
· Range等
小結
我希望這篇文章列舉的ASP.NET MVC框架7個頂級功能是實至名歸的,其中模板和數據驗證功能有點廣泛,我將在以后的文章中進行詳述,當然歡迎你在本文后面的評論中發表你的高見。