ASP.NET MVC 概觀

MVC 架構概觀

什麼是 MVC

  現今網路環境對於網頁呈現的效果與執行速度的要求愈來愈高,使用行動裝置的人也愈來愈多,Web Forms 的優勢漸漸不再,因此微軟提供另一種網頁開發方式。
  MVC 是一種軟體設計模式,將軟體切割為三層架構(M-V-C),讓開發者可以依照這三層架構來開發不同的邏輯應用程式(輸入邏輯、商業邏輯、顯示邏輯),把畫面跟商業邏輯拆開,讓維護更容易。
  在 ASP.NET MVC 中,開發人員可依需求不同再增加 Service 層(將 data 與 model mapping。 )或是 Repository 層等等。
*注意:MVC 並不是直接對應到 3-Tier architecture (Presentation, Business Logic, Data Access)。
*輸入邏輯:指的是 Controller,因為 Route 進來之後看網址和 Http verb 就會把 request 交給相對應的 action 處理,Controller 會位在第一線與 user input 接觸,因此叫輸入邏輯。
*商業邏輯:指的是 Model,舉例來說:user model 可能會有 auth/buy/sendMessage 這三個 method,分別用來登入/買東西/傳送訊息,因為和 Business model 有關,因此稱為商業邏輯。
*顯示邏輯:指的是 View,View 接收到資訊後會顯示畫面給使用者。
  在開發上有Aspect-Oriented Programming (AOP) 中 Separation of Concerns (SOC) 原則,也就是說開發時一次只關注一件事情。例如:開發佈告欄就只要關注佈告欄會有哪些特殊邏輯就好。
  MVC 的開發精髓:使用 OOP 的方式來開發程式。

MVC 的優點與缺點

優點:
  MVC 架構提供了相當高的開發靈活度,並且將一件事情細分為個別單元,降低了單元之間的複雜度,提升開發的品質與速度(可平行開發)。
  無 ViewState ,降低網頁流量(資料傳輸量)、無網頁生命週期,藉由 Http 動詞來處理各種不同情況的動作,開發較簡單。
缺點:
  資料的傳遞需要建立一個類別,會減緩開發速度。
  Model 設計的不好會影響到程式的延展性。

ASP.NET MVC

MVC 與 Web Forms 的差異

  最主要的差異為,ASP.NET MVC 無生命週期、無事件驅動,也無 ViewState。
  在 Web Forms 中,每一個前端的操作事件都會有一個對應的後端執行事件,例如:要修改按下按鈕後要做的動作時,要先找到前端的按鈕程式檔,然後在找到期對應的後端 Click 事件方法來修改,然而,在 MVC 框架中則無須如此,MVC 拋棄了透過 ViewState 來模擬事件讓後端程式可以知道前端的按鈕被點擊,而是使用一個個 Action (動作)來取代事件。
  Web Forms 框架中,使用者的每一個動作都需要執行完整的網頁生命週期,並且將網頁的狀態透過 ViewState 儲存起來,但是該動作需要執行的事件可能只是眾多事件中的其中之一。而 MVC 框架則是透過 Forms Submit 來呼叫特定網址,來直接對應動作。
  因為無 View State 所以無法保留網頁狀態,也因此在 Web Forms 中需要記錄網頁狀態的功能都無法使用(例如:GridView的分頁與排序、Page Trace)。

Model (模型)負責什麼--詳情書本第二章。

  Model 負責封裝所有和商業邏輯有關的資料,例如:資料庫的存取操作、資料結構、資料格式的驗證等等。
  Model 不需要知道他會如何被顯示或如何被應用,只需專注於資料的存取、定義、驗證即可。
  Model 層常見的設計技術:Entity Framework, NHibernate, LINQ to SQL, 強行別的 DataSet (Typed DataSet), ADO.NET。
*注意:強行別的設計方式才能有效的利用內建的 Model Binding 與 Model 驗證機制。

View 負責什麼

  Controller 將資料傳給 View,View 在依據「顯示邏輯」配合資料呈現給使用者,例如:View 接收到的數值超過某個基準點時,在畫面上顯示為紅色。
  ASP.NET Web Forms 的一個特色為 code-behind,因此有些人可能會無法接受 ASP.NET MVC 這種 HTML 裡包含程式碼的方式。View 中雖然有程式碼,但也僅止於顯示邏輯,前端可以開發出各式各樣的應用卻不用修改到後端程式。但無法接受的開發人員仍可透過 HTML Helper or Razor Helper 來抽離。

Controller 負責什麼

  Request 會先進入到 Controller,Controller 在依需求向 Model 取得資料,在將資料傳給 View 顯示,而 View 若包含 RenderAction (HTML extension) 則會再依需求跑一次 Controller 的流程。

ASP.NET MVC5 的開發環境

安裝設定值

NuGet

NuGet 是什麼

  NeGet 為一個讓 Open Source 等第三方套件更好和專案整合的套件。

安裝設定值

IIS Express

IIS Express 是什麼

  IIS/IIS Express 為一種小型網站伺服器,過去 ASP.NET 也有自己的網站伺服器,但在 Visutal Studio 2013 版本以上皆採用 IIS Express。

如何啟用 IIS

Web Forms 轉換至 MVC

有哪些地方要注意

  盡量使用 Strong Type (強行別:盡量使用有型別的方法開發),讓錯誤盡量能在 Compile time 發現且執行程式碼的速度較快。例如在 C# 中 int age = 22; MessageBox.Show(age); 會 compile failed,因為 MessageBox.Show() 的引數一定得給 String type,開發人員須自行轉換型別來符合具有型別的方法(MessageBox.Show(Convert.ToString(age)))。
*age.ToString() 是指方法;age.ToString 是指屬性。
  Language Integrated Query (LINQ) 為一種能夠統一各種主流資料庫操作語法的資料庫操作語法,隨著 MVC 框架與強行別設計愈來愈受到重視。--詳情於本書第三章。
  在 Web Forms 中,後端程式碼必須相當明確的指定資料要 Binding (繫結)到前端的哪一個控制項,但是在 MVC 框架中,Model binding 則靈活許多,預設的 DefaultModelBinder 類別會自動將名稱相同的部分自動 binding。
  • Convention over Configuration (習慣取代配置):例如 Controller 的檔名最後會加上 Controller、View 的檔名最後會加上 View、Web API 的 Action 名稱會加上 http 動詞。

留言