設計模式之王 - MVC
Last updated
Last updated
Model-View-Controller
(縮寫 MVC ) 是 Cocoa 框架的一部分,並且毋庸置疑是最常用的設計模式之一。它可以幫你把物件根據職責進行劃分和歸類。
作為劃分依據的三個基本職責是:
模型層 (Model):
存儲數據並且定義如何操作這些數據。在我們的例子中,就是 PhotoVO
類別。
視圖層 (View) :
負責模型層的顯示,並且負責用戶的互動,一般來說都是繼承自 UIView
這個父類別。在我們的項目中就是 PhotoView
這個類。
控制器 (Controller):
控制器是整個系統的掌控者,它連接了模型層和數據層,並且把數據在視圖層展示出來,監聽各種事件,負責數據的各種操作。
在我們的專案中哪個是控制器?
MainViewController
這個類別就是。
如果你的項目遵循 MVC 的設計模式,那麼各種對象要不是 Model ,要不是 View ,要不就是 Controller。
當然在實際的開發中也可以靈活變化,其實到目前為止,大家無論是練習甚至實際開發,只聽過 MVC ,卻不一定會完全遵守。
三者之間的關係如下:
模型層通知控制器層任何數據的變化,然後控制器層會刷新視圖層中的數據。視圖層可以通知控制器層用戶的交互事件,然後控制器會處理各種事件以及刷新數據。
你可能會感覺奇怪:為什麼要把這三個東西分開來,而不能放在一個類別裡呢?那樣似乎更簡單一點嘛。
筆者之所以這樣做,是為了讓程式碼可以有更好的分離和重用。理想狀態下,視圖層應當和模型層完全分離,又稱為鬆耦合。如果視圖層不依賴任何模型層的具體實現,那麼就可以很容易的被其他模型重複使用,用來展示不同的數據。
舉個例子,比如在未來我們需要添加電影照片或者什麼書籍封面,我們依舊可以使用 PhotoView
這個類作為展示。
更久遠點來說,在以後如果你建立了一個新的專案並且需要用到和圖片相關的內容,你可以直接用 PhotoView
類別,因為它並不依賴於任何視圖模組。這就是 MVC 的強大之處,三大元素,各司其職,降低全部程式碼的耦合性。