ASP.NET MVC 系列2 - 特色

之前在學習ASP.NET MVC整理的一些資料: ASP.NET MVC Framework它將網站切分成Model、View、Controller三個部份;Model負責存放資料庫的目前修改的狀態,View會經由Controller處理後的判斷來進行前端網頁的呈現。雖然MVC的架構已經發展許久,至於ASP.NET這次導入了MVC的架構,勢必有它的不同所在,以下為各位介紹ASP.NET MVC的特色:

之前在學習ASP.NET MVC整理的一些資料: ASP.NET MVC Framework它將網站切分成Model、View、Controller三個部份;Model負責存放資料庫的目前修改的狀態,View會經由Controller處理後的判斷來進行前端網頁的呈現。雖然MVC的架構已經發展許久,至於ASP.NET這次導入了MVC的架構,勢必有它的不同所在,以下為各位介紹ASP.NET MVC的特色:

  • 支援Test-Driven Development(TDD)

由於ASP.NET MVC它將系統的程式的商業邏輯、資料存取以及呈現端區分開來,對於測試來說我們可以針對每一個程式碼進行單元測試(Unit test),在MVC Framework當中,核心部份的對外窗口都是由Interface來互動,所以可以使用mock的物件來模擬商業邏輯的Service物件。在Test的工具選擇,只需要是.NET Framework相容(例如:NUnit或是VSTS)的都可以測試。

  • 可延伸性以及可抽換性的框架

基本上ASP.NET MVC Framework一開始的設計就考慮到彼此的元件是可抽換的,類似我們在存取資料庫時,會因為今天的資料庫可能是Sql Server、Oracle或是MySql…,我們程式只需要抽換資料庫的物件就可以存取不同資料庫的來,當然ASP.NET MVC Framework也可以根據我們的需要自行開發可抽換的元件,例如URL routing的規則、Filter Attribute等。然而ASP.NET MVC Framework也支援相依注射(Dependency Injection)以及控制反轉(Inversion of Control)。支援現有的ASP.NET網頁ASP.NET MVC Framework支援現有的ASP.NET網頁(.aspx檔案)、使用者控制項(.ascx檔案)以及主版頁面 (.master檔案)。

  • URL-Mapping

在ASP.NET MVC Framework當中,網址上的每一個路徑都對應到Controller中的一個方法,所以當我們在網頁上輸入http://localhost/Home/index.aspx,系統會自動呼叫HomeController類別當中的index方法,透過index方法來決定要呈現的View Page。然而我們也可以自行定義網址路由(URL Routing)的規則。

  • 不再使用Postback與ViewState

若熟悉ASP.NET Web Forms的開發者,一定對這個兩個名詞相當熟悉,但是這邊要跟大家宣布的式ASP.NET MVC Framework將不會使用以往ASP.NET的技術,取而代之的會是透過Controller來監聽使用者的事件動作,再決定要處理邏輯以及要呈現的網頁。然而在ViewState以及ASP.NET的頁面生命週期的事件(Page_Init、Page_Load…),並不會整合到 MVC Framework當中的View Page裡,相信這部份會讓習慣使用Web Forms來設計的人會覺得是一個很大的改變。

  • 不使用伺服器控制項

相信大家看到這一點時,心中一定打了一個很大的問號,不用伺服器控制項那不就有許多好用的功能都無法使用了?對,沒錯。目前ASP.NET MVC Framework確實不建議整合以前的伺服器控制項,畢竟這些控制項都具備有Postback以及 ViewState的特性在,這樣就會跟原本的設計有出入了,但是各位別擔心,MVC Framework提供了另一個物件HtmlHelper來幫助大家建立網頁上的一些控制項,雖然目前的版本中提供許多基本常用的元件,但是大家最在意的GridView卻還沒有納入,不過我們可以自己建立我們想要的控制項,在後面的章節會為各位介紹。另外一方面,目前有有third-party的元件可以使用(MVC Contrib),各位有興趣的也可以去參考看看。