溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

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

發(fā)布時(shí)間:2020-07-23 04:53:42 來(lái)源:網(wǎng)絡(luò) 閱讀:245 作者:緣起愿落 欄目:開(kāi)發(fā)技術(shù)

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

Model View Controller Cocoa的基石之一,且毫無(wú)疑問(wèn)的是所有設(shè)計(jì)模式中最常用的設(shè)計(jì)模式,它根據(jù)你的應(yīng)用中的一般角色去分類對(duì)象,鼓勵(lì)在完全分離的模式下分角色。

           Model:這個(gè)對(duì)象hold住你的應(yīng)用數(shù)據(jù),且定義如何去操作它,例如本例中就是Album類。

           View:這個(gè)對(duì)象掌管了Model的可視化顯示,和控制用戶的交互,基本上所有的都是UIView和它的子類。在本例中這個(gè)就是被分離成的AlbumView類。

           Controller:控制器是調(diào)節(jié)所有工作的調(diào)節(jié)器,它訪問(wèn)模型中的數(shù)據(jù),然后用視圖去顯示它,根據(jù)要求監(jiān)聽(tīng)事件和操作數(shù)據(jù)。你能想象在這個(gè)哪個(gè)是Controller么,就是ViewController.

視圖和模型通過(guò)控制器去交流的場(chǎng)景可以被描述成以下圖:

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

如果在Model中有任何數(shù)據(jù)變化,那么它就會(huì)通知Controller,反過(guò)來(lái),Controller更新在View中的數(shù)據(jù),View可以通知Controller關(guān)于用戶的行為,然后Controller要么根據(jù)需要或者檢索要求的數(shù)據(jù)去更新Model。

你也許會(huì)懷疑為什么不只是創(chuàng)建了Controller然后將ViewModel一起放到里面去實(shí)現(xiàn)?那樣看起來(lái)不是更容易么?

這所有的所有都是為了是代碼分離化和提高可重用性。理想情況下,視圖應(yīng)該會(huì)從Model中完全分離出來(lái),如果視圖不依賴于某個(gè)具體的Model的實(shí)現(xiàn)部分,那么它可以用不同的Model去展示其他一些數(shù)據(jù)來(lái)實(shí)現(xiàn)它的可重用性。

例如:如果將來(lái)你想添加一些電影和書籍到你的庫(kù)中去,你仍然可以使用相同的AlbumView去展示你的電影和書籍的對(duì)象,更進(jìn)一步說(shuō),如果你想去創(chuàng)建一個(gè)工程去處理專輯,你可以很簡(jiǎn)單的去重用你的Album類,因?yàn)樗灰蕾囉谌魏我粋€(gè)視圖。這就是MVC的魔力。

如何實(shí)現(xiàn)MVC模式

首先,你需要確保你的工程中的每一個(gè)類都是Controller,或者View,或者M(jìn)odel,不要講任何兩個(gè)中的角色的任務(wù)連接在一塊,通過(guò)創(chuàng)建Album和AlbumV類你已經(jīng)做了一個(gè)很好的工作。

其次,為了確保遵守這個(gè)工作方法,你應(yīng)該創(chuàng)建三個(gè)工程組去hold住你的代碼,每類一個(gè)分組。

按住Command+option+N鍵,創(chuàng)建一個(gè)組,名為Model,同樣創(chuàng)建View和Controller,將Album.h和Album.m拖入Model中,拖動(dòng)AlbumView.hAlbumView.m的視圖組,最后拖ViewController.hViewController.m到控制器組.

這時(shí)候你的工程結(jié)構(gòu)應(yīng)該看起來(lái)是這樣的:

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

現(xiàn)在看起來(lái)沒(méi)有那些文件浮在四周,看著好多了。顯然你可以有其他的組和類,但是這個(gè)應(yīng)用中的核心就是包含在這三個(gè)類中的。

既然你的組成部分已經(jīng)被組織起來(lái)了,你需要從別的地方去獲得album的數(shù)據(jù),你將會(huì)創(chuàng)建一個(gè)API類去在全部的代碼中去管理這些數(shù)據(jù)-這將會(huì)在你的下一個(gè)設(shè)計(jì)模式-單例中得到展示。


向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

mvc
AI