設計模式之王 - MVC
Model-View-Controller?(縮寫 MVC ) 是 Cocoa 框架的一部分,並且毋庸置疑是最常用的設(shè)計(jì)模式之一。它可以幫你把物件根據(jù)職責(zé)進(jìn)行劃分和歸類。
作為劃分依據(jù)的三個(gè)基本職責(zé)是:
- 模型層 (Model): 存儲(chǔ)數(shù)據(jù)並且定義如何操作這些數(shù)據(jù)。在我們的例子中,就是?PhotoVO?類別。
- 視圖層 (View) : 負(fù)責(zé)模型層的顯示,並且負(fù)責(zé)用戶的互動(dòng),一般來說都是繼承自?UIView?這個(gè)父類別。在我們的項(xiàng)目中就是?PhotoView?這個(gè)類。
- 控制器 (Controller): 控制器是整個(gè)系統(tǒng)的掌控者,它連接了模型層和數(shù)據(jù)層,並且把數(shù)據(jù)在視圖層展示出來,監(jiān)聽各種事件,負(fù)責(zé)數(shù)據(jù)的各種操作。
在我們的專案中哪個(gè)是控制器?MainViewController?這個(gè)類別就是。
如果你的項(xiàng)目遵循 MVC 的設(shè)計(jì)模式,那麼各種對(duì)象要不是 Model ,要不是 View ,要不就是 Controller。
當(dāng)然在實(shí)際的開發(fā)中也可以靈活變化,其實(shí)到目前為止,大家無論是練習(xí)甚至實(shí)際開發(fā),只聽過 MVC ,卻不一定會(huì)完全遵守。
三者之間的關(guān)係如下:
模型層通知控制器層任何數(shù)據(jù)的變化,然後控制器層會(huì)刷新視圖層中的數(shù)據(jù)。視圖層可以通知控制器層用戶的交互事件,然後控制器會(huì)處理各種事件以及刷新數(shù)據(jù)。
你可能會(huì)感覺奇怪:為什麼要把這三個(gè)東西分開來,而不能放在一個(gè)類別裡呢?那樣似乎更簡(jiǎn)單一點(diǎn)嘛。
筆者之所以這樣做,是為了讓程式碼可以有更好的分離和重用。理想狀態(tài)下,視圖層應(yīng)當(dāng)和模型層完全分離,又稱為鬆耦合。如果視圖層不依賴任何模型層的具體實(shí)現(xiàn),那麼就可以很容易的被其他模型重複使用,用來展示不同的數(shù)據(jù)。
舉個(gè)例子,比如在未來我們需要添加電影照片或者什麼書籍封面,我們依舊可以使用?PhotoView?這個(gè)類作為展示。
更久遠(yuǎn)點(diǎn)來說,在以後如果你建立了一個(gè)新的專案並且需要用到和圖片相關(guān)的內(nèi)容,你可以直接用?PhotoView?類別,因?yàn)樗鼇K不依賴於任何視圖模組。這就是 MVC 的強(qiáng)大之處,三大元素,各司其職,降低全部程式碼的耦合性。
from:https://wildenchen.gitbooks.io/swift-design-patterns/content/Chapter03/MVC.html
《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的設計模式之王 - MVC的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 深入浅出MVC模式
- 下一篇: 三层架构和MVC模式