設(shè)計(jì)模式之王

2018-08-12 21:55 更新

設(shè)計(jì)模式之王- MVC

Model-View-Controller (縮寫 MVC ) 是 Cocoa 框架的一部分,并且毋庸置疑是最常用的設(shè)計(jì)模式之一。它可以幫你把對(duì)象根據(jù)職責(zé)進(jìn)行劃分和歸類。

作為劃分依據(jù)的三個(gè)基本職責(zé)是:

  • 模型層 (Model) :存儲(chǔ)數(shù)據(jù)并且定義如何操作這些數(shù)據(jù)。在我們的例子中,就是 Album 類。
  • 視圖層 (View) :負(fù)責(zé)模型層的可視化展示,并且負(fù)責(zé)用戶的交互,一般來(lái)說(shuō)都是繼承自 UIView 這個(gè)基類。在我們的項(xiàng)目中就是 AlbumView 這個(gè)類。
  • 控制器 (Controller) :控制器是整個(gè)系統(tǒng)的掌控者,它連接了模型層和數(shù)據(jù)層,并且把數(shù)據(jù)在視圖層展示出來(lái),監(jiān)聽(tīng)各種事件,負(fù)責(zé)數(shù)據(jù)的各種操作。不妨猜猜在我們的項(xiàng)目中哪個(gè)是控制器?啊哈猜對(duì)了: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)大之處,三大元素,各司其職,減少依賴。

如何使用 MVC 模式

首先,你需要確定你的項(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健?

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)