詳解 ASP.NET Core MVC 的設計模式

MVC 是什麼?它是如何工作的?我們來解剖它

在本節課中我們要討論的內容:

  • 什麼是 MVC?
  • 它是如何工作的?

什麼是 MVC

MVC 由三個基本部分組成 - 模型(Model),視圖(View)和控制器(Controller)。 它是用於實現應用程序的用戶界面層的架構設計模式。 一個典型的實際應用程序通常具有以下層:

  • 用戶展現層
  • 業務邏輯處理層
  • 數據訪問讀取層 
  • MVC 設計模式通常用於實現應用程序的用戶界面層。

 

MVC 如何工作

讓我們瞭解 MVC 設計模式是如何與案例一起工作的。 假設我們想要查詢特定學生的詳細信息(即 ID 爲 1 的學生信息),並在 HTML 表格中的網頁上顯示這些詳細信息,如下所示。

15 學生信息2

那麼,從 Web 瀏覽器我們發出請求,URL 地址如下所示:

 http://52abp.com/student/details/1

15請求完整圖片

上圖的意思如下:

  • 當我們的請求到達服務器時,作爲 MVC 設計模式下的 Controller,會接收請求並且處理它。
  • Controller 會創建模型(Model),該模型是一個類文件,會進行數據的展示。
  • 在 Molde 中,除了數據本身,Model 還包含從底層數據源(如數據庫)查詢數據後的邏輯信息。
  • 除了創建 Model 之外,控制器還選擇 View 並將 Model 對象傳遞給該 View。
  • 視圖僅負責呈現 Modle 的數據。
  • 視圖會生成所需的 HTML 以顯示模型數據,即 Controller 提供給它的學生數據。
  • 然後,此 HTML 通過網絡發送,最終呈現在發出請求的用戶面前。

Model (模型)

因此,在當前案例中 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類。

但是其實我們是可以的,但是我們使用接口的原因,是因爲接口,允許我們使用依賴注入,而依賴注入則可以幫助我們創建低耦合且易於測試的系統。 我們將在即將發佈的視頻中詳細討論依賴注入

View -視圖

MVC 中的 View 應該只包含顯示 Controller 提供給它的 Model 數據的邏輯。您可以將視圖視爲 HTML 模板。假設在我們的示例中,我們希望在 HTML 表中顯示Student數據。

這種情況下的視圖會和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 ComponentView Components是此版本 MVC 中的新增功能。 我們可以在以後的課程中討論它。

Controller 控制器

當來自瀏覽器的請求到達我們的應用程序時,作爲 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 是用於實現應用程序的用戶界面層的架構設計模式

  • 模型(Model):包含一組數據的類和管理該數據的邏輯信息。
  • View(視圖):包含顯示邏輯,用於顯示 Controller 提供給它的模型中數據。
  • Controller(控制器):處理 Http 請求,調用模型,請選擇一個視圖來呈現該模型。

正如您所看到的,在 MVC 設計模式中,我們可以清楚地分離各個關注點,讓他們各司其職。 每個組件都有一個非常具體的任務要做。 在我們的下一個視頻中,我們將討論在我們的 asp.net core 應用程序中設置 MVC 中間件。

歡迎添加個人微信號:Like若所思。

歡迎關注我的公衆號,不僅爲你推薦最新的博文,還有更多驚喜和資源在等着你!一起學習共同進步!

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章