Model-View-Controller
(縮寫 MVC ) 是 Cocoa 框架的一部分,并且毋庸置疑是最常用的設(shè)計(jì)模式之一。它可以幫你把對(duì)象根據(jù)職責(zé)進(jìn)行劃分和歸類。
作為劃分依據(jù)的三個(gè)基本職責(zé)是:
Album
類。UIView
這個(gè)基類。在我們的項(xiàng)目中就是 AlbumView
這個(gè)類。ViewController
這個(gè)類就是。如果你的項(xiàng)目遵循 MVC 的設(shè)計(jì)模式,那么各種對(duì)象要不是 Model ,要不是 View ,要不就是 Controller。當(dāng)然在實(shí)際的開發(fā)中也可以靈活變化,比如結(jié)合具體業(yè)務(wù)使用 MVVM 結(jié)構(gòu)給 ViewController
瘦瘦身,也是可以的。
三者之間的關(guān)系如下:
模型層通知控制器層任何數(shù)據(jù)的變化,然后控制器層會(huì)刷新視圖層中的數(shù)據(jù)。視圖層可以通知控制器層用戶的交互事件,然后控制器會(huì)處理各種事件以及刷新數(shù)據(jù)。
你可能會(huì)感覺(jué)奇怪:為什么要把這三個(gè)東西分開來(lái),而不能揉在一個(gè)類里呢?那樣似乎更簡(jiǎn)單一點(diǎn)嘛。
Naive.
之所以這樣做,是為了將代碼更好的分離和重用。理想狀態(tài)下,視圖層應(yīng)當(dāng)和模型層完全分離。如果視圖層不依賴任何模型層的具體實(shí)現(xiàn),那么就可以很容易的被其他模型復(fù)用,用來(lái)展示不同的數(shù)據(jù)。
舉個(gè)例子,比如在未來(lái)我們需要添加電影或者什么書籍,我們依舊可以使用 AlbumView
這個(gè)類作為展示。更久遠(yuǎn)點(diǎn)來(lái)說(shuō),在以后如果你創(chuàng)建了一個(gè)新的項(xiàng)目并且需要用到和專輯相關(guān)的內(nèi)容,你可以直接復(fù)用 Album
類因?yàn)樗⒉灰蕾囉谌魏我晥D模塊。這就是 MVC 的強(qiáng)大之處,三大元素,各司其職,減少依賴。
首先,你需要確定你的項(xiàng)目中的每個(gè)類都是三大基本類型中的一種:控制器、模型、視圖。不要在一個(gè)類里糅合多個(gè)角色。目前我們創(chuàng)建了 Album
類和 AlbumView
類是符合要求的,做得很好。
然后,為了確保你遵循這種模式,你最好創(chuàng)建三個(gè)項(xiàng)目分組來(lái)存放代碼,分別是 Model、View、Controller,保持每個(gè)類型的文件分別獨(dú)立。
接下來(lái)把 Album.swift
拖到 Model
分組,把 AlbumView.swift
拖到 View
分組,然后把 ViewController.swift
拖到 Controller
分組中。
現(xiàn)在你的項(xiàng)目應(yīng)該是這個(gè)樣子:
現(xiàn)在你的項(xiàng)目已經(jīng)有點(diǎn)樣子了,不再是各個(gè)文件顛沛流離居無(wú)定所了。顯然你還會(huì)有其他分組和類,但是應(yīng)用的核心就在這三個(gè)類里。
現(xiàn)在你的內(nèi)容已經(jīng)組織好了,接下來(lái)要做的就是獲取專輯的數(shù)據(jù)。你將會(huì)創(chuàng)建一個(gè) API 類來(lái)管理數(shù)據(jù) - 這里我們會(huì)用到下一個(gè)設(shè)計(jì)模式:?jiǎn)卫J健?
更多建議: