設(shè)計(jì)模式理解

隨著開發(fā)工作的增長(zhǎng),對(duì)于代碼質(zhì)量的提高顯得尤為重要。我認(rèn)為在提高代碼質(zhì)量中,最為立竿見影的就是要有一個(gè)好的項(xiàng)目架構(gòu),而好的架構(gòu)中最重要的就是一個(gè)好的設(shè)計(jì)模式。本篇結(jié)合我個(gè)人對(duì)設(shè)計(jì)模式的理解,持續(xù)更新中。

一、常用設(shè)計(jì)模式

常用的設(shè)計(jì)模式有:MVC、MVP、MVVM。

二、各設(shè)計(jì)模式介紹

1.MVC模式

MVC設(shè)計(jì)模式是在開發(fā)中最經(jīng)常用到的設(shè)計(jì)模式,而蘋果官方也推薦使用MVC設(shè)計(jì)模式。MVC設(shè)計(jì)模式分為兩種,一種是傳統(tǒng)的MVC,一種是蘋果MVC。


傳統(tǒng)MVC

如上圖就是傳統(tǒng)MVC的架構(gòu):

controller層持有View和Model,View和model之間還有依賴。其中View層是無狀態(tài)的,即它不做任何信息記錄,只負(fù)責(zé)展示信息。但此模式有個(gè)很大的弊端,就是MVC各層耦合度太高,每一個(gè)實(shí)體都要和其他兩個(gè)實(shí)體產(chǎn)生關(guān)聯(lián),無法進(jìn)行測(cè)試和復(fù)用。

接下來是蘋果推薦的MVC架構(gòu):

蘋果的MVC架構(gòu)

此架構(gòu)和傳統(tǒng)架構(gòu)的最大區(qū)別就是將View層和Model層進(jìn)行分離,即View層和Model層沒有耦合性,其中View層和Model層的交互都由C層代為中轉(zhuǎn)。這樣造成C層代碼量很大,所以很多人說蘋果推薦的MVC為重控制器模式,看下圖會(huì)清晰很多:

重MVC

如上圖,其實(shí)此MVC模式的中C層和View層在View的生命周期中相互依賴,以至于很難將他們分開,也正由于此,所以導(dǎo)致MVC的代碼不可進(jìn)行單元測(cè)試,因?yàn)樵诿鎸?duì)單元測(cè)試中,難以獨(dú)立開MVC的耦合關(guān)系。在不調(diào)用視圖控制器生命周期方法的前提下,不可能對(duì)視圖控制器進(jìn)行測(cè)試。

2.MVP模式

MVP模式

如上圖,MVP模式中新增了一個(gè)Presenter層?;叵胍幌翸VC中ViewController緊緊耦合在一起的位置,在MVP中是Presenter,它與視圖控制器的生命周期沒有任何關(guān)聯(lián),并且由于沒有任何布局的代碼,很容易模擬視圖View。它的職責(zé)是更新View中的數(shù)據(jù)和狀態(tài)。

3.MVVM模式


MVVM模式

它和MVP模式很像:視圖控制器劃分成View、ViewModel之間沒有緊密的耦合。

此外,數(shù)據(jù)綁定的概念很像帶監(jiān)控器的MVP,不同的是這次綁定的是ViewViewModel,而不是ViewModel。那么在實(shí)際的iOS開發(fā)中ViewModel是什么?從根本上來說,它是獨(dú)立于UIKit能夠展現(xiàn)你的View和狀態(tài)。ViewModel可以調(diào)用Model來改變數(shù)據(jù),也可以通過數(shù)據(jù)變更來更新自己,因?yàn)?b>View和ViewModel進(jìn)行了綁定,相應(yīng)地也就能同步更新View。

三、總結(jié)

好的設(shè)計(jì)模式可以提高程序的復(fù)用性、減低程序的耦合性。但是也不要盲目的追求設(shè)計(jì)模式,因?yàn)槊糠N設(shè)計(jì)模式都有自己的優(yōu)缺點(diǎn),所以選擇當(dāng)前項(xiàng)目中適合自己的設(shè)計(jì)模式顯得非常重要。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容