在本節課中咱們要討論的內容:html
MVC 由三個基本部分組成 - 模型(Model),視圖(View)和控制器(Controller)。 它是用於實現應用程序的用戶界面層的架構設計模式。 一個典型的實際應用程序一般具備如下層:web
讓咱們瞭解 MVC 設計模式是如何與案例一塊兒工做的。 假設咱們想要查詢特定學生的詳細信息(即 ID 爲 1 的學生信息),並在 HTML 表格中的網頁上顯示這些詳細信息,以下所示。數據庫
那麼,從 Web 瀏覽器咱們發出請求,URL 地址以下所示:設計模式
http://52abp.com/student/details/1
上圖的意思以下:瀏覽器
所以,在當前案例中 Model,是由 Student 類和管理學生數據的 StudentRepository 類組成,以下所示。服務器
public class Student { public int Id { get; set; } public string Name { get; set; } public string ClassName { get; set; } } public interface IStudentRepository { Student GetStudent(int id); void Save(Student student); } public class StudentRepository : IStudentRepository { public Student GetStudent(int id) { //寫邏輯實現 查詢學生詳情信息 throw new NotImplementedException(); } public void Save(Student student) { //寫邏輯實現保存學生信息 throw new NotImplementedException(); } }
咱們使用Student類來保存學生數據,而StudentRepository 類則負責查詢並保存學生信息到數據庫中。 若是要歸納 model 的話,它就是 MVC 中用於包含一組數據的類和管理該數據的邏輯信息。 表示數據的類是 Student 類,管理數據的類是 StudentRepository 類。微信
若是您想知道咱們爲何使用IStudentRepository
接口。 咱們不能只使用沒有接口的StudentRepository類。網絡
可是其實咱們是能夠的,可是咱們使用接口的緣由,是由於接口,容許咱們使用依賴注入,而依賴注入則能夠幫助咱們建立低耦合且易於測試的系統。 咱們將在即將發佈的視頻中詳細討論依賴注入。架構
MVC 中的 View 應該只包含顯示 Controller 提供給它的 Model 數據的邏輯。您能夠將視圖視爲 HTML 模板。假設在咱們的示例中,咱們但願在 HTML 表中顯示Student數據。asp.net
這種狀況下的視圖會和Student對象一塊兒提供。 Student對象是將學生數據傳遞給視圖的模型。 視圖的惟一做用是將學生數據顯示在 HTML 表中。 這是視圖中的代碼。
@model StudentManagement.Model.Student <!DOCTYPE html> <html> <head> <title>學生頁面詳情</title> </head> <body> <table> <tr> <td>Id</td> <td>@model.Id</td> </tr> <tr> <td>名字</td> <td>@model.Name</td> </tr> <tr> <td>班級</td> <td>@model.ClassName</td> </tr> </table> </body> </html>
在 MVC 中,View 僅負責呈現模型數據。 視圖中不該該有複雜的邏輯。 視圖中的邏輯必須很是少並且要小,而且它也必須僅用於呈現數據。 若是到達表示邏輯過於複雜的點,請考慮使用ViewModel 或View Component。 View Components是此版本 MVC 中的新增功能。 咱們能夠在之後的課程中討論它。
當來自瀏覽器的請求到達咱們的應用程序時,做爲 MVC 中的控制器,它處理傳入的 http 請求並響應用戶的操做。
在這種狀況下,用戶已向 URL 發出請求(/ student/ details/1),所以該請求被映射到StudentController中的Details方法,並向其傳遞Student的 ID,在本例中爲 1. 此映射爲 由咱們的 web 應用程序中定義的路由規則完成。
咱們將在即將發佈的視頻中詳細討論 ASP.NET Core MVC 中的路由。
public class StudentController:Controller { private IStudentRepository _studentRepository; public StudentController(IStudentRepository studentRepository) { _studentRepository = studentRepository; } public IActionResult Details(int id) { Student model = _studentRepository.GetStudent(id); return View(model); } }
如您所見,從Details方法中的代碼,控制器將生成模型,在這種狀況下,Model 是Student對象。 要從基礎數據(如數據庫)源檢索Student數據,控制器使用StudentRepository類。
一旦控制器使用所需數據構造了Student模型對象,它就會將該Student模型對象傳遞給視圖。 而後,視圖生成所需的 HTML,以顯示 Controller 提供給它的Student數據。 而後,此 HTML 經過網絡發送給發出請求的用戶。
若是這一點使人困惑,或者沒法理解,請不要擔憂,咱們將經過爲咱們的應用程序,會在後面一步步的建立模型,視圖和控制器來實現這一目標,咱們將在此過程當中進行更加清晰和明確。
MVC 是用於實現應用程序的用戶界面層的架構設計模式
正如您所看到的,在 MVC 設計模式中,咱們能夠清楚地分離各個關注點,讓他們各司其職。 每一個組件都有一個很是具體的任務要作。 在咱們的下一個視頻中,咱們將討論在咱們的 asp.net core 應用程序中設置 MVC 中間件。
歡迎添加我的微信號:Like若所思。
歡迎關注個人公衆號,不只爲你推薦最新的博文,還有更多驚喜和資源在等着你!一塊兒學習共同進步!