基于iOS的MVVM框架

MVVM

什么是MVVM:

MVVM從字面上理解為model(數(shù)據(jù)模型)凯正,view|controller(視圖|視圖控制器),viewMode(視圖模型)豌蟋,Binder(綁定機制)廊散。

  • model:
    MVVM中的model和MVC中的保持一致,負(fù)責(zé)容納數(shù)據(jù)信息梧疲。(PS:盡量減少在model中封裝額外的操作數(shù)據(jù)的業(yè)務(wù)邏輯奸汇,可以通過category和viewModel來實現(xiàn)業(yè)務(wù)邏輯施符。)
  • view:
    由MVC中的view+controller組成。主要負(fù)責(zé)
    在MVVM中吧view和controller結(jié)合起來擂找,我們把它們視為一個組件。
  • viewModel:
    用來處理MVC中controller上冗余復(fù)雜的業(yè)務(wù)邏輯浩销,主要功能包括以下
    1. 封裝業(yè)務(wù)邏輯處理
    2. 封裝網(wǎng)絡(luò)處理
    3. 封裝緩存數(shù)據(jù)
  • binder(一種綁定機制)
    一種可以讓開發(fā)者方便實現(xiàn)view和viewModel同步贯涎,避免編寫大量繁雜的樣板化代碼,實現(xiàn)數(shù)據(jù)綁定慢洋。(ReactiveCocoa)

使用 MVVM 注意:

  • viewController引用viewModel塘雳,但是反過來不行。(不能再viewModel中引入UIKit)普筹。
  • MVVM可以兼容MVC败明。
  • MVVM配合一個綁定機制效果最好(ReactiveCocoa)。
  • viewController盡量不涉及業(yè)務(wù)邏輯太防,讓viewModel去做這些妻顶。
  • viewController是一個中間人,接收view的事件蜒车,調(diào)用viewModel的方法讳嘱,響應(yīng)viewModel的變化
  • viewModel絕對不能包含視圖view(UIKit),不然就就和view產(chǎn)生了耦合酿愧,不方便復(fù)用和測試沥潭。
  • viewModel相互之間可以有依賴

MVVM的優(yōu)勢和缺點

  1. 優(yōu)點
    • 低耦合:view可以獨立于model變化和修改,一個viewModel可以綁定到不同的view上
    • 可重用性:可以把一些視圖邏輯放在一個
    • 獨立開發(fā):開發(fā)人員可以專注于業(yè)務(wù)邏輯和數(shù)據(jù)開發(fā)viewModel嬉挡,設(shè)計人員可以專注于頁面設(shè)計
    • 可測試钝鸽,可以針對于viewModel來測試
  2. 缺點
    • bug變得難以調(diào)試,當(dāng)遇到了異常庞钢,可能是view的問題拔恰,也有可能是model的問題。數(shù)據(jù)綁定使得bug快速傳遞到其他地方焊夸,要定為原始出問題的地方就變得不那么容易了仁连。
    • 對數(shù)據(jù)轉(zhuǎn)化需要花費更多的內(nèi)存。主要來自于對數(shù)組內(nèi)阱穗,item又再次包含數(shù)組饭冬。多次嵌套的類型。需要多次轉(zhuǎn)化才能用來view顯示揪阶。
    • 對于api返回的數(shù)據(jù)類型標(biāo)準(zhǔn)化要求較高,提高modelview的復(fù)用率鲁僚,否則容易出現(xiàn)類型爆炸,加大了維護成本侨艾。

總結(jié)

MVVM = model+(view+controller)+viewModel
MVC = model+view+controller
MVVM在MVC的基礎(chǔ)上,抽離出了MVC中controller上冗余復(fù)雜的業(yè)務(wù)邏輯viewModel袋励,其中弱化了controller的概念当叭。
總而言之,MVC和MVVM各有各的好處優(yōu)點磺芭,但缺點在它們所帶來的優(yōu)勢面前不值一提钾腺。它們的低耦合琅攘,封裝性,高度復(fù)用哨查,獨立開發(fā)模塊大大提高了開發(fā)效率剧辐。同時我們也要有一個變通的心,框架是為了服務(wù)于我們寫出高質(zhì)量的代碼荧关,不是我們?yōu)榱颂子每蚣芏懘a忍啤。比如MVC,我們針對于其詬病鳄梅,也能寫出更輕量級的controller。東西是死的戴尸,人是活的冤狡。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市挎峦,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌坦胶,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,378評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異滥崩,居然都是意外死亡,警方通過查閱死者的電腦和手機蜂科,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,970評論 3 399
  • 文/潘曉璐 我一進店門短条,熙熙樓的掌柜王于貴愁眉苦臉地迎上來茸时,“玉大人,你說我怎么就攤上這事缓待。” “怎么了旋炒?”我有些...
    開封第一講書人閱讀 168,983評論 0 362
  • 文/不壞的土叔 我叫張陵瘫镇,是天一觀的道長答姥。 經(jīng)常有香客問我,道長通孽,這世上最難降的妖魔是什么睁壁? 我笑而不...
    開封第一講書人閱讀 59,938評論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮行剂,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘腌巾。我一直安慰自己,他們只是感情好澈蝙,可當(dāng)我...
    茶點故事閱讀 68,955評論 6 398
  • 文/花漫 我一把揭開白布灯荧。 她就那樣靜靜地躺著逗载,像睡著了一般链烈。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上强衡,一...
    開封第一講書人閱讀 52,549評論 1 312
  • 那天食侮,我揣著相機與錄音,去河邊找鬼链快。 笑死,一個胖子當(dāng)著我的面吹牛域蜗,可吹牛的內(nèi)容都是我干的霉祸。 我是一名探鬼主播袱蜡,決...
    沈念sama閱讀 41,063評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼坪蚁!你這毒婦竟也來了镜沽?” 一聲冷哼從身側(cè)響起缅茉,我...
    開封第一講書人閱讀 39,991評論 0 277
  • 序言:老撾萬榮一對情侶失蹤男摧,失蹤者是張志新(化名)和其女友劉穎耗拓,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蔬蕊,經(jīng)...
    沈念sama閱讀 46,522評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡哥谷,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,604評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了勉吻。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,742評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡惑惶,死狀恐怖短纵,靈堂內(nèi)的尸體忽然破棺而出香到,到底是詐尸還是另有隱情,我是刑警寧澤悠就,帶...
    沈念sama閱讀 36,413評論 5 351
  • 正文 年R本政府宣布梗脾,位于F島的核電站,受9級特大地震影響瑞妇,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜自赔,卻給世界環(huán)境...
    茶點故事閱讀 42,094評論 3 335
  • 文/蒙蒙 一柳琢、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧他去,春花似錦倒堕、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,572評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至憔披,卻和暖如春芬膝,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背筹误。 一陣腳步聲響...
    開封第一講書人閱讀 33,671評論 1 274
  • 我被黑心中介騙來泰國打工纫事, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留丽惶,地道東北人。 一個月前我還...
    沈念sama閱讀 49,159評論 3 378
  • 正文 我出身青樓钾唬,卻偏偏與公主長得像奕巍,于是被迫代替她去往敵國和親儒士。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,747評論 2 361

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