設計模式之王 - MVC

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

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

  • 模型層 (Model):

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

  • 視圖層 (View) :

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

  • 控制器 (Controller):

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

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

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

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

三者之間的關係如下:

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

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

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

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

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

Last updated