淺談MVC和MVVM架構(gòu)模式(一)

MVC:M(模型)+V(視圖)+C(控制器)
MVVM:M(模型)+V(視圖+控制器)+VM:(視圖模型)

1.MVC架構(gòu)模式

這張圖片是斯坦福大學(xué)公開課上最經(jīng)典和最規(guī)范的MVC標(biāo)準(zhǔn).


Paste_Image.png

比如我們要用MVC架構(gòu)模式實(shí)現(xiàn)這個(gè)頁面

IMG_0332.PNG

a.模型對(duì)象(M)
是封裝了應(yīng)用程序的數(shù)據(jù),簡單理解就是一個(gè)頁面中要展示每一個(gè)商品的價(jià)格,圖片,描述,銷量.價(jià)格模型對(duì)象中就有相應(yīng)的價(jià)格,圖片,描述,銷量,價(jià)格屬性.
b.視圖對(duì)象(V)
是繪制出來的用戶可以看見及操作的視圖,比如每一個(gè)商品存在cell中,cell又有
說商品的價(jià)格要用Laber顯示,圖片要用UIImageView顯示等
c.控制器(C)
連接視圖類和模型類疆导,任務(wù)是把每一個(gè)商品信息都顯示在屏幕上。

那么他們之間又是如何通信的呢.
1.模型和控制器之間的通信方式
a.廣播通知,控制器注冊(cè)監(jiān)聽模型數(shù)據(jù)變化的通知赌莺,在數(shù)據(jù)變化時(shí)骇吭,模型發(fā)送廣播通知目代,控制器收到通知進(jìn)行下一步處理遮婶。
b.KVO(key-value-observing):就是用模型座位控制器的一個(gè)屬性袱衷,模型中的值有所改變,下次控制器在使用模型數(shù)據(jù)時(shí)宦搬,會(huì)取到最新的數(shù)據(jù)汉嗽。
2.視圖與控制器通信方式
a.目標(biāo)動(dòng)作機(jī)制(target-action)陈惰,簡單來講就是用戶與視圖交互溶握,通過交互事件觸發(fā)控制器的方法匾鸥。比如:按鈕的點(diǎn)擊奴愉,下拉刷新等等暑始。
b.委托代理(delegate)吱雏,視圖講自己無法決定的是委托給控制器實(shí)現(xiàn),通過自己的代理方法完成自己的需要龄捡,比如商品的點(diǎn)擊對(duì)應(yīng)進(jìn)入商品的詳情頁面慷暂。
c.數(shù)據(jù)源機(jī)制,視圖告訴控制器想要做什么行瑞,比如每個(gè)商品的顯示,商品數(shù)據(jù)存在model中突照,控制器訪問model拿到數(shù)據(jù)再告訴視圖怎么顯示氧吐。

總結(jié):MVC看似挺好,但是問題來了座慰,MVC使用起來內(nèi)部邏輯可以說是相當(dāng)復(fù)雜豁翎,在設(shè)計(jì)的時(shí)候需要很好的考慮,能夠完全自如的適用MVC也算是有一定的水準(zhǔn)了邦尊。建議:項(xiàng)目相對(duì)不是很大的就不要用了优烧。

2.MVVM架構(gòu)模式

1432542301497557.gif

從上面這張圖MVVM比MVC多出來一個(gè)VM的結(jié)合體,這個(gè)多出來的結(jié)合體對(duì)視圖控制器以任何形式直接起作用或直接通告其變化,呈現(xiàn)由 view-model 提供的數(shù)據(jù)畦娄。當(dāng)展示一個(gè)新的視圖控制器時(shí), 或很小的視圖被 view-model 表現(xiàn)時(shí), 你應(yīng)要求當(dāng)前的 view-model 為你創(chuàng)建一個(gè)子 view-model.

以上面那個(gè)商品列表頁面來說,我們需要建立一個(gè)productViewModel為控制器提供商品的價(jià)格,圖片,描述,銷量,價(jià)格數(shù)據(jù).

總結(jié):在 iOS 上使用 MVVM 的動(dòng)機(jī),就是讓它能減少 View Controller 的復(fù)雜性并使得表示邏輯更易于測試

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末熙卡,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子滑燃,更是在濱河造成了極大的恐慌颓鲜,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,589評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件乐严,死亡現(xiàn)場離奇詭異昂验,居然都是意外死亡艾扮,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,615評(píng)論 3 396
  • 文/潘曉璐 我一進(jìn)店門呛梆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來磕诊,“玉大人,你說我怎么就攤上這事霎终。” “怎么了击困?”我有些...
    開封第一講書人閱讀 165,933評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長蛛枚。 經(jīng)常有香客問我脸哀,道長,這世上最難降的妖魔是什么盲镶? 我笑而不...
    開封第一講書人閱讀 58,976評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮溉贿,結(jié)果婚禮上浦旱,老公的妹妹穿的比我還像新娘。我一直安慰自己代兵,他們只是感情好爷狈,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,999評(píng)論 6 393
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著思币,像睡著了一般羡微。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上妈倔,一...
    開封第一講書人閱讀 51,775評(píng)論 1 307
  • 那天盯蝴,我揣著相機(jī)與錄音,去河邊找鬼捧挺。 笑死,一個(gè)胖子當(dāng)著我的面吹牛翅睛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播疏旨,決...
    沈念sama閱讀 40,474評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼爬骤,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼莫换!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起拉岁,我...
    開封第一講書人閱讀 39,359評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤喊暖,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后陵叽,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,854評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡偏序,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,007評(píng)論 3 338
  • 正文 我和宋清朗相戀三年研儒,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了独令。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,146評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡冲呢,死狀恐怖招狸,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情瓢颅,我是刑警寧澤,帶...
    沈念sama閱讀 35,826評(píng)論 5 346
  • 正文 年R本政府宣布翰意,位于F島的核電站,受9級(jí)特大地震影響醒第,放射性物質(zhì)發(fā)生泄漏进鸠。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,484評(píng)論 3 331
  • 文/蒙蒙 一客年、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧量瓜,春花似錦、人聲如沸扔傅。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,029評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽杠纵。三九已至,卻和暖如春骇塘,著一層夾襖步出監(jiān)牢的瞬間韩容,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,153評(píng)論 1 272
  • 我被黑心中介騙來泰國打工插爹, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留请梢,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,420評(píng)論 3 373
  • 正文 我出身青樓气嫁,卻偏偏與公主長得像够坐,于是被迫代替她去往敵國和親崖面。 傳聞我的和親對(duì)象是個(gè)殘疾皇子梯影,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,107評(píng)論 2 356

推薦閱讀更多精彩內(nèi)容