MVC MVP MVVM 模式學(xué)習(xí)

MVC

1.MVC 介紹

MVC 模式的意思就是將軟件分為三個部分:

  1. 視圖(view):用戶界面
  2. 控制器(Controller):業(yè)務(wù)邏輯
  3. 模型(Model):數(shù)據(jù)保存

2.MVC 各個模塊之間的通訊說明

MVC 各個部分之間的通訊:

  1. Model :用來保存數(shù)據(jù)
  2. view : 用來顯示Model的數(shù)據(jù)
  3. Controller :用來調(diào)節(jié)模型和視圖之間的交互。(完成業(yè)務(wù)邏輯的處理)

mvc 中所有的通信都是單向的蘸朋。

兩幅代表性的圖:


Paste_Image.png

我傾向于這個圖吐根!


Paste_Image.png

MVP

MVP 模式將 Controller 改名為 Presenter, 同時改變通信的方向贞奋。

  1. 各個部分之間的通訊都是雙向的勾缭。
  2. View 和 Mode 不發(fā)生聯(lián)系,都是通過 Presenter 傳遞煞躬。
  3. View 非常的薄, 不部署任何的業(yè)務(wù)邏輯妓局,被稱為“ 被動視圖”(Passive View),即沒有任何的主動性融虽,而Presenter 非常厚茴迁, 所有邏輯都部署在哪里椿争。
Paste_Image.png

MVVM

mvvm 介紹

MVVM 模式將 Presenter 改名為ViewModel, 基本上與 MVP 模式完全一致边苹。
唯一的區(qū)別就是沪悲,它采用雙向綁定(data-binding):View 的變動,自動反應(yīng)到 ViewModel 帮坚,反之亦然局嘁。

Paste_Image.png

在iOS 開發(fā)中為什么要使用 MVVM

在iOS 應(yīng)用中日益增長的重量級視圖控制器的問題:在 MVC 應(yīng)用里,許多邏輯被放在ViewController 里剩岳。它們中的一些確實屬于ViewController ,但更多的是所謂的“表示邏輯”(presentation logic)腰池;為了不讓控制器日益增大示弓,便于測試管理。便出現(xiàn)了MVVM.
MVVM: 其實是 MVC 的增強版本忱嘹,將表示邏輯從Controller 中移出础米,放到一個新的對象里,即ViewModel
MVVM 學(xué)習(xí)的博客推薦:
1事扭、淺談iOS中MVVM的架構(gòu)設(shè)計與團(tuán)隊協(xié)作 -->包含示例代碼
2、ReactiveCocoa 和 MVVM 入門

一句話就是剝離或輕量化 Controller 中關(guān)于 View 和 Model 的部分涵亏。
Model-View-ViewModel 可以:
? MVVM 可以兼容你當(dāng)下使用的 MVC 架構(gòu)宰睡。
? MVVM 增加你的應(yīng)用的可測試性。
? MVVM 配合一個綁定機制效果最好气筋。
并沒有對我們的MVC架構(gòu)做太多改變拆内。還是同樣的代碼,只不過移動了位置宠默。它與MVC兼容麸恍,帶來更輕量的ViewControllers。

Model 是不可變的搀矫,所以我們可以只在初始化的時候指定我們 View Model 的屬性抹沪。對于可變 Model,我們還需要使用一些綁定機制瓤球,這樣 View Model 就能在背后的 Model 改變時更新自身的屬性融欧。此外,一旦 View Model 上的 Model 發(fā)生改變卦羡,那 View 的屬性也需要更新噪馏。Model 的改變應(yīng)該級聯(lián)向下通過 View Model 進(jìn)入 View。
更輕量的 View Controllers
? 把 Data Source 和其他 Protocols 分離出來
? 將 Domain Logic 移到 Model 中
? 創(chuàng)建 Store 類
? 把網(wǎng)絡(luò)請求邏輯移到 Model 層
? 把 View 代碼移到 View 層
我們已經(jīng)看到一些用來創(chuàng)建更小巧的 view controllers 的技術(shù)虹茶。我們并不是想把這些技術(shù)應(yīng)用到每一個可能的角落逝薪,只是我們有一個目標(biāo):寫可維護(hù)的代碼。知道這些模式后蝴罪,我們就更有可能把那些笨重的 view controllers 變得更整潔。

MVVM = Model + View + ViewModel
看上去和MVC差不多步清,就是把ViewController替換成了ViewModel要门。如果是這樣的話,MVVM壓根就沒有存在的必要了廓啊。所以并不是進(jìn)行了簡單的替換欢搜。MVVM由3部分組成:Model , View 谴轮, ViewModel炒瘟。
? Model: 作為數(shù)據(jù)的容器
? View: 負(fù)責(zé)界面的展示以及用戶交互的處理
? ViewModel: 負(fù)責(zé)業(yè)務(wù)邏輯處理
iOS中的MVVM
然并卵iOS中我們沒有辦法繞過UIViewController。諸如UITabController第步, UINavigationController是非常非常常用的疮装。沒有這些容器缘琅,我們寫界面時的情景簡直不敢想象。IB與UIViewController的結(jié)合比較緊密廓推。如果你通過IB來畫界面的話刷袍,更離不開UIViewController。那么iOS中的MVVM是什么樣的?
? Model: 作為數(shù)據(jù)的容器
? View: 負(fù)責(zé)界面的展示以及用戶交互的處理
? ViewController: 用代碼創(chuàng)建視圖樊展;膠水代碼呻纹,連接View和ViewModel
? ViewModel: 負(fù)責(zé)業(yè)務(wù)邏輯處理

Model,View专缠,ViewModel的職責(zé)都沒有改變雷酪。iOS的MVVM開發(fā)模式中ViewController只做與視圖有關(guān)的操作,以及連接View與ViewModel的膠水代碼涝婉。也就是說View部分其實是由原本的View+部分ViewController組成太闺。

膠水代碼
iOS中沒有膠水代碼的MVVM是不完整的
膠水代碼都做了哪些事情?

  1. 將控件的事件傳遞給ViewModel嘁圈,使得ViewModel其有機會處理用戶交互省骂。
  2. 將ViewModel的內(nèi)容與View進(jìn)行綁定,使得View有機會顯示正確的內(nèi)容最住。
    在ReactiveCocoa出來之前钞澳,膠水代碼很難寫的很優(yōu)雅。這也是為什么以前iOS中MVVM并不怎么火的原因涨缚。關(guān)于ReactiveCocoa的學(xué)習(xí)與使用本文不會涉及轧粟。如果有需要可以自行搜索學(xué)習(xí)。它是響應(yīng)式開發(fā)的利器脓魏。
    iOS的MVVM開發(fā)模式不能沒有"ReactiveCocoa"
    沒有膠水代碼兰吟,你不能將業(yè)務(wù)邏輯從ViewController中抽離。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末茂翔,一起剝皮案震驚了整個濱河市混蔼,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌珊燎,老刑警劉巖惭嚣,帶你破解...
    沈念sama閱讀 218,858評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異悔政,居然都是意外死亡晚吞,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評論 3 395
  • 文/潘曉璐 我一進(jìn)店門谋国,熙熙樓的掌柜王于貴愁眉苦臉地迎上來顿苇,“玉大人艇纺,你說我怎么就攤上這事苇倡。” “怎么了集畅?”我有些...
    開封第一講書人閱讀 165,282評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長逢勾。 經(jīng)常有香客問我牡整,道長,這世上最難降的妖魔是什么溺拱? 我笑而不...
    開封第一講書人閱讀 58,842評論 1 295
  • 正文 為了忘掉前任逃贝,我火速辦了婚禮,結(jié)果婚禮上迫摔,老公的妹妹穿的比我還像新娘沐扳。我一直安慰自己,他們只是感情好句占,可當(dāng)我...
    茶點故事閱讀 67,857評論 6 392
  • 文/花漫 我一把揭開白布沪摄。 她就那樣靜靜地躺著,像睡著了一般纱烘。 火紅的嫁衣襯著肌膚如雪杨拐。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,679評論 1 305
  • 那天擂啥,我揣著相機與錄音哄陶,去河邊找鬼。 笑死哺壶,一個胖子當(dāng)著我的面吹牛屋吨,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播山宾,決...
    沈念sama閱讀 40,406評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼至扰,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了资锰?” 一聲冷哼從身側(cè)響起敢课,我...
    開封第一講書人閱讀 39,311評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎台妆,沒想到半個月后翎猛,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,767評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡接剩,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了萨咳。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片懊缺。...
    茶點故事閱讀 40,090評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出鹃两,到底是詐尸還是另有隱情遗座,我是刑警寧澤,帶...
    沈念sama閱讀 35,785評論 5 346
  • 正文 年R本政府宣布俊扳,位于F島的核電站途蒋,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏馋记。R本人自食惡果不足惜号坡,卻給世界環(huán)境...
    茶點故事閱讀 41,420評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望梯醒。 院中可真熱鬧宽堆,春花似錦、人聲如沸茸习。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽号胚。三九已至籽慢,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間猫胁,已是汗流浹背箱亿。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留杜漠,地道東北人极景。 一個月前我還...
    沈念sama閱讀 48,298評論 3 372
  • 正文 我出身青樓,卻偏偏與公主長得像驾茴,于是被迫代替她去往敵國和親盼樟。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,033評論 2 355

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