MVC 是 Model-View-Controller 的縮寫,在 MVC 架構下,會把應用程式分類成三個不同的組件,也就是模型 (Model)、視圖 (View) 和 控制器 (Controller),不同組件所負責的任務都不相同,以達到關注點分離的目的。客戶端的請求會先由路由(明天會說)傳送到 Controller
,由 Controller
透過 Model
取得資料,再選擇回傳給客戶端的 View
。三組元件彼此的相依關係與各自的工作如下:
圖片來源:https://docs.microsoft.com/en-us/aspnet/core/mvc/overview
在應用程式中,負責資料模型的定義、商業邏輯、取得或驗證資料等工作。例如:使用強型別檢視時,通常會定義一個 ViewModel 的類型,用來封裝在檢視中需要使用的資料,Controller 則是會負責將對應的資料指定給 ViewModel 的實例。
可以參考其他常用的 Model 類型。
負責把資料呈現到客戶端。ASP.NET MVC 是使用 Razor 將 .NET 程式碼轉換成 HTML。View 中應該只包含與顯示內容有關的邏輯,簡單來說就是越簡單越好。
負責在接收請求後與 Model 溝通,再決定要由哪個 View 來呈現資料。
如果過去有寫過 ASP.NET MVC 的讀者,轉移到 ASP.NET Core MVC 應該是不太會有什麼感覺的。兩者的觀念一致,使用上也沒有什麼差別。但不用再為了寫 WebAPI 另外參考一堆相依了!(歡呼)
在 ASP.NET Core 應用程式中,需要在 Startup.ConfigureServices
中加入 MVC 的服務,並在 Startup.Configure
中設定 MVC 中介層:
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
}
public void Configure(IApplicationBuilder app)
{
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
// 或者用下面這行取代
// app.UseMvcWithDefaultRoute();
}
}