MVC

MVC(Model-View-Controller,模型-檢視-控制器)是一種軟體設計模式,常用於實現使用者介面、資料和控制邏輯。它強調將軟體的業務邏輯和顯示分離。“關注點分離”有助於更好地分工和改進維護。其他一些設計模式是基於 MVC 的,例如 MVVM(Model-View-Viewmodel,模型-檢視-檢視模型)、MVP(Model-View-Presenter,模型-檢視-展示器)和 MVW(Model-View-Whatever,模型-檢視-隨意)。

MVC 軟體設計模式的三個部分可描述如下:

  1. 模型(Model):管理資料和業務邏輯。
  2. 檢視(View):處理佈局和顯示。
  3. 控制器(Controller):將命令路由到模型和檢視部分。

模型-檢視-控制器示例

想象一個簡單的購物清單應用程式。我們只想要一個包含本週需要購買的每件商品的名稱、數量和價格的列表。下面我們將描述如何使用 MVC 實現其中一些功能。

Diagram to show the different parts of the mvc architecture.

模型(Model)

模型定義了應用程式應該包含什麼資料。如果此資料的狀態發生變化,模型通常會通知檢視(以便顯示可以根據需要更改),有時也會通知控制器(如果需要不同的邏輯來控制更新的檢視)。

回到我們的購物清單應用程式,模型將指定列表項應包含什麼資料(專案、價格等)以及已存在哪些列表項。

檢視(View)

檢視定義了應用程式的資料應該如何顯示。

在我們的購物清單應用程式中,檢視將定義列表如何呈現給使用者,並從模型接收要顯示的資料。

控制器(Controller)

控制器包含根據應用程式使用者的輸入更新模型和/或檢視的邏輯。

因此,例如,我們的購物清單可以有輸入表單和按鈕,允許我們新增或刪除專案。這些操作需要更新模型,因此輸入被髮送到控制器,然後控制器根據需要操作模型,然後模型將更新的資料傳送到檢視。

但是,您可能還只想更新檢視以不同的格式顯示資料,例如,將專案順序更改為按字母順序,或從最低價格到最高價格。在這種情況下,控制器可以直接處理此問題,而無需更新模型。

Web 中的 MVC

作為一名 Web 開發人員,即使您以前從未有意識地使用過它,此模式也可能相當熟悉。您的資料模型可能包含在某種資料庫中(無論是傳統的伺服器端資料庫,如 MySQL,還是客戶端解決方案,如 IndexedDB [en-US])。您的應用程式的控制程式碼可能用 HTML/JavaScript 編寫,您的使用者介面可能使用 HTML/CSS/或其他您喜歡的東西編寫。這聽起來非常像 MVC,但 MVC 使這些元件遵循更嚴格的模式。

在 Web 的早期,MVC 架構主要在伺服器端實現,客戶端透過表單或連結請求更新,並接收更新後的檢視在瀏覽器中顯示。然而,如今,隨著客戶端資料儲存的出現和 Fetch API 能夠根據需要進行部分頁面更新,更多的邏輯被推送到客戶端。

諸如 AngularJSEmber.js 等 Web 框架都實現了 MVC 架構,儘管方式略有不同。

另見