ASP.NET MVC 概觀

模型檢視控制器 (Model-View-Controller,MVC) 架構模式會將應用程式分成三個主要元件:模型、檢視和控制器。 ASP.NET MVC 架構為 ASP.NET Web Form 模式提供建立 Web 應用程式的替代方式。 ASP.NET MVC 架構是可高度測試的輕量型呈現架構,其中 (如同搭配 Web Form 應用程式) 整合了現有 ASP.NET 功能,例如主版頁面和成員資格驗證。 MVC 架構是在 System.Web.Mvc 組件中定義。

MVC 設計模式

模型檢視控制器設計模式

MVC 是許多開發人員熟悉的標準設計模式。 有些類型的 Web 應用程式將受益於 MVC 架構。 有些則繼續使用仰賴 Web Form 和回傳的傳統 ASP.NET 應用程式模式。 還有一些類型的 Web 應用程式將合併兩種方式;兩種方式並不互斥。

MVC 架構包括下列元件:

  • 模型。 模型物件屬於實作應用程式資料網域邏輯之應用程式的一部分。 通常,模型物件會擷取和儲存資料庫中的模型狀態。 例如,Product 物件可能從資料庫擷取資訊、操作該資訊,然後將更新的資訊寫回 SQL Server 資料庫的 Products 資料表。

    在小型應用程式中,模型通常是概念上的分隔而不是實體分隔。 例如,如果應用程式僅讀取資料集並將它傳送到檢視,則應用程式沒有實體模型層和相關聯的類別。 在這種情況下,資料集會接替模型物件的角色。

  • 檢視。 檢視是顯示應用程式中使用者介面 (UI) 的元件。 通常此 UI 是從模型資料建立。 例如 Products 資料表的編輯檢視,它會根據 Product 物件目前的狀態顯示文字方塊、下拉式清單和核取方塊。

  • 控制器。 控制器就是元件,可以處理使用者互動、使用模型並且在最後選擇可以轉譯要顯示 UI 的檢視。 在 MVC 應用程式中,檢視只會顯示資訊;控制器則會處理和回應使用者輸入和互動。 例如,控制器會處理查詢字串值,並且將這些值傳遞至模型,接著模型可能會使用這些值查詢資料庫。

MVC 模式可幫助您建立分隔應用程式不同方面 (輸入邏輯、商務邏輯和 UI 邏輯) 的應用程式,同時在這些項目之間提供鬆散的結合。 此模式會指定每一種邏輯必須出現在應用程式中的位置。 UI 邏輯應該位在檢視中, 輸入邏輯應該位在控制器中, 商務邏輯則應該位在模型中。 此分隔可幫助您在建置應用程式時管理複雜性,因為它可讓您一次專注於實作的一個方面。 例如,您可以專注在檢視上,而不需倚賴商務邏輯。

MVC 應用程式三個主要元件之間的鬆散結合也有助於提升平行開發的效率。 例如,某一位開發人員可以在檢視上執行工作,另一位開發人員可在控制器邏輯上執行工作,而第三位開發人員可專注在模型中的商務邏輯上。

除了管理複雜性之外,MVC 模式在測試應用程式上,比測試 Web Form ASP.NET Web 應用程式更為容易。 例如,在 Web Form ASP.NET Web 應用程式中,一個類別可以同時用來顯示輸出和回應使用者輸入。 為 Web Form ASP.NET 應用程式撰寫自動化測試可能相當複雜,因為您必須具現化網頁類別、類別的所有子控制項,以及應用程式中其他相依的類別,才能測試個別網頁。 由於必須具現化許多類別才能執行網頁,因此要撰寫應用程式的個別部分專用的測試並不容易。 因此,實作 Web Form ASP.NET 應用程式的測試可能比在 MVC 應用程式中進行測試更困難。 此外,Web Form ASP.NET 應用程式中的測試需要 Web 伺服器。 MVC 架構會解除元件之間的連結,並且大量使用介面,介面可讓個別元件獨立於架構的其他部分進行測試。

您必須仔細考量要使用 ASP.NET MVC 架構或 ASP.NET Web Form 模型實作 Web 應用程式。 MVC 架構不會取代 Web Form 模型;因此您可以針對 Web 應用程式使用任一種架構 (如果您有現成的 Web Form 應用程式,這些應用程式會繼續如往常般執行)。

在您決定針對特定網站使用 MVC 架構或 Web Form 模型之前,務必謹慎評估兩種方式的優勢。

MVC Web 應用程式的優點

ASP.NET MVC 架構提供下列優點:

  • 透過將應用程式細分成模型、檢視和控制器的方式,讓管理複雜性更為容易。

  • 此架構不使用檢視狀態或伺服器表單。 因此對於想要完全掌控應用程式行為的開發人員來說,MVC 架構相當理想。

  • 此架構使用前端控制器模式,透過單一控制器處理 Web 應用程式要求。 如此可讓您設計支援豐富的路由基礎結構的應用程式。 如需詳細資訊,請參閱前端控制器 (英文)。

  • 能為測試為導向的開發工作 (Test-Driven Development,TDD) 提供更佳的支援。

  • 能充分搭配大型開發人員團隊所支援的 Web 應用程式,同時適用於需要充分掌控應用程式行為的 Web 設計人員。

Web Form Web 應用程式的優點

Web Form 架構提供下列優點:

  • 支援事件模型,會在 HTTP 上保留狀態,有益於業務線 Web 應用程式開發工作。 Web Form 應用程式提供數百種伺服器控制項中支援的許多種事件。

  • 使用頁面控制器模式將功能加入至個別頁面。 如需詳細資訊,請參閱頁面控制器 (英文)。

  • 在伺服器表單上使用檢視狀態,能夠讓管理狀態資訊更容易。

  • 適用於希望利用提供的大量元件快速開發應用程式的小型 Web 開發人員和設計人員團隊。

  • 對應用程式開發工作而言一般較不複雜,因為元件 (Page 類別、控制項等) 彼此緊密整合,通常需要的程式碼也比 MVC 模型少。

ASP.NET MVC 架構提供下列功能:

  • 劃分應用程式工作 (輸入邏輯、商務邏輯和 UI 邏輯)、測試能力及測試為導向的開發工作 (TDD)。 MVC 架構中的所有核心合約都是以介面為主,而且可以使用模擬物件測試,模擬物件是模仿應用程式中實際物件之行為的模擬物件。 您可以對應用程式進行單元測試,而不需在 ASP.NET 程序中執行控制器,如此使單元測試迅速而靈活。 您可以使用與 .NET Framework 相容的任何單元測試架構。

  • 可擴充且可插入的架構。 ASP.NET MVC 架構的元件設計為能夠輕鬆取代或自訂。 您可以外掛自己的檢視引擎、URL 路由原則、動作方法參數序列化,以及其他元件。 ASP.NET MVC 架構還支援使用「相依性插入」(Dependency Injection,DI) 和「控制項反轉」(Inversion of Control,IOC) 容器模型。 DI 可讓您將物件插入類別中,而不需倚賴類別建立物件本身。 IOC 會指定,如果物件需要另一個物件,則第一個物件應從來源外部 (例如組態檔) 取得第二個物件。 如此可讓測試更為容易。

  • 延伸的 ASP.NET 路由支援,這是強大的 URL 對映元件,可讓您建置包含易於了解且可搜尋之 URL 的應用程式。 URL 不必包含副檔名且設計為支援 URL 命名模式,適用於搜尋引擎最佳化 (Search Engine Optimization,SEO) 和代表性狀態傳輸 (Representational State Transfer,REST) 定址。

  • 支援在現有 ASP.NET 網頁 (.aspx 檔)、使用者控制項 (.ascx 檔) 和主版頁面 (.master 檔) 標記檔中使用標記做為檢視範本。 您可以使用現有的 ASP.NET 功能搭配 ASP.NET MVC 架構,例如巢狀主版頁面、內嵌運算式 (<%= %>)、宣告式伺服器控制項、範本、資料繫結、當地語系化等。

  • 支援現有的 ASP.NET 功能。 ASP.NET MVC 可讓您使用許多功能,例如表單驗證和 Windows 驗證、URL 授權、成員資格和角色、輸出和資料快取、工作階段和設定檔狀態管理、健康狀態監控、組態系統及提供者架構。

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 AndrewHsiao 的頭像
    AndrewHsiao

    Andrew的部落格

    AndrewHsiao 發表在 痞客邦 留言(0) 人氣()