實作 Swift 設計模式
  • 前言
  • Swift 設計模式
  • 入門 - 開始
  • 設計模式之王 - MVC
    • 如何使用 MVC 模式
  • 簡易工廠模式 - Simple Factory
    • 如何使用簡易工廠模式
  • 外觀模式 - Facade
    • 如何使用外觀模式
  • 裝飾者模式 - Decorator
    • 擴展
    • 如何使用擴展
    • 委派
    • 如何使用委派模式
  • 單例模式 - Singleton
    • 如何使用單例模式
  • 適配器模式 - Adapter
    • 如何使用適配器模式
  • 觀察者模式 - Observer
    • 通知 - Notification
    • 鍵值觀察 - KVO
    • 事件流 - Event Flow
  • 設計模式之神話 - MVP
    • 如何使用 MVP 模式
    • 最後的潤色
  • 入門 - 小結
Powered by GitBook
On this page

Was this helpful?

設計模式之王 - MVC

Previous入門 - 開始Next如何使用 MVC 模式

Last updated 6 years ago

Was this helpful?

Model-View-Controller (縮寫 MVC ) 是 Cocoa 框架的一部分,並且毋庸置疑是最常用的設計模式之一。它可以幫你把物件根據職責進行劃分和歸類。

作為劃分依據的三個基本職責是:

  • 模型層 (Model):

    存儲數據並且定義如何操作這些數據。在我們的例子中,就是 PhotoVO 類別。

  • 視圖層 (View) :

    負責模型層的顯示,並且負責用戶的互動,一般來說都是繼承自 UIView 這個父類別。在我們的項目中就是 PhotoView 這個類。

  • 控制器 (Controller):

    控制器是整個系統的掌控者,它連接了模型層和數據層,並且把數據在視圖層展示出來,監聽各種事件,負責數據的各種操作。

在我們的專案中哪個是控制器?MainViewController 這個類別就是。

如果你的項目遵循 MVC 的設計模式,那麼各種對象要不是 Model ,要不是 View ,要不就是 Controller。

當然在實際的開發中也可以靈活變化,其實到目前為止,大家無論是練習甚至實際開發,只聽過 MVC ,卻不一定會完全遵守。

三者之間的關係如下:

模型層通知控制器層任何數據的變化,然後控制器層會刷新視圖層中的數據。視圖層可以通知控制器層用戶的交互事件,然後控制器會處理各種事件以及刷新數據。

你可能會感覺奇怪:為什麼要把這三個東西分開來,而不能放在一個類別裡呢?那樣似乎更簡單一點嘛。

筆者之所以這樣做,是為了讓程式碼可以有更好的分離和重用。理想狀態下,視圖層應當和模型層完全分離,又稱為鬆耦合。如果視圖層不依賴任何模型層的具體實現,那麼就可以很容易的被其他模型重複使用,用來展示不同的數據。

舉個例子,比如在未來我們需要添加電影照片或者什麼書籍封面,我們依舊可以使用 PhotoView 這個類作為展示。

更久遠點來說,在以後如果你建立了一個新的專案並且需要用到和圖片相關的內容,你可以直接用 PhotoView 類別,因為它並不依賴於任何視圖模組。這就是 MVC 的強大之處,三大元素,各司其職,降低全部程式碼的耦合性。