[](http://cdn5.raywenderlich.com/wp-content/uploads/2013/07/mvcking.png)
`Model-View-Controller`?(縮寫 MVC ) 是 Cocoa 框架的一部分,并且毋庸置疑是最常用的設計模式之一。它可以幫你把對象根據職責進行劃分和歸類。
作為劃分依據的三個基本職責是:
* 模型層 (Model) :存儲數據并且定義如何操作這些數據。在我們的例子中,就是?`Album`?類。
* 視圖層 (View) :負責模型層的可視化展示,并且負責用戶的交互,一般來說都是繼承自`UIView`?這個基類。在我們的項目中就是?`AlbumView`?這個類。
* 控制器 (Controller) :控制器是整個系統的掌控者,它連接了模型層和數據層,并且把數據在視圖層展示出來,監聽各種事件,負責數據的各種操作。不妨猜猜在我們的項目中哪個是控制器?啊哈猜對了:`ViewController`?這個類就是。
如果你的項目遵循 MVC 的設計模式,那么各種對象要不是 Model ,要不是 View ,要不就是 Controller。當然在實際的開發中也可以靈活變化,比如結合具體業務使用 MVVM 結構給`ViewController`?瘦瘦身,也是可以的。
三者之間的關系如下:
[](http://cdn2.raywenderlich.com/wp-content/uploads/2013/07/mvc0.png)
模型層通知控制器層任何數據的變化,然后控制器層會刷新視圖層中的數據。視圖層可以通知控制器層用戶的交互事件,然后控制器會處理各種事件以及刷新數據。
你可能會感覺奇怪:為什么要把這三個東西分開來,而不能揉在一個類里呢?那樣似乎更簡單一點嘛。
Naive.
之所以這樣做,是為了將代碼更好的分離和重用。理想狀態下,視圖層應當和模型層完全分離。如果視圖層不依賴任何模型層的具體實現,那么就可以很容易的被其他模型復用,用來展示不同的數據。
舉個例子,比如在未來我們需要添加電影或者什么書籍,我們依舊可以使用?`AlbumView`?這個類作為展示。更久遠點來說,在以后如果你創建了一個新的項目并且需要用到和專輯相關的內容,你可以直接復用?`Album`?類因為它并不依賴于任何視圖模塊。這就是 MVC 的強大之處,三大元素,各司其職,減少依賴。
### 如何使用 MVC 模式
首先,你需要確定你的項目中的每個類都是三大基本類型中的一種:控制器、模型、視圖。不要在一個類里糅合多個角色。目前我們創建了?`Album`?類和?`AlbumView`?類是符合要求的,做得很好。
然后,為了確保你遵循這種模式,你最好創建三個項目分組來存放代碼,分別是 Model、View、Controller,保持每個類型的文件分別獨立。
接下來把?`Album.swift`?拖到?`Model`?分組,把?`AlbumView.swift`?拖到?`View`?分組,然后把`ViewController.swift`?拖到?`Controller`?分組中。
現在你的項目應該是這個樣子:
[](http://cdn4.raywenderlich.com/wp-content/uploads/2014/11/swiftDesignPattern2-259x320.png)
現在你的項目已經有點樣子了,不再是各個文件顛沛流離居無定所了。顯然你還會有其他分組和類,但是應用的核心就在這三個類里。
現在你的內容已經組織好了,接下來要做的就是獲取專輯的數據。你將會創建一個 API 類來管理數據 - 這里我們會用到下一個設計模式:單例模式。