1、MVC
MVC即Model-View-Controller
職責(zé):
Model:業(yè)務(wù)模型
View:顯示用戶界面
Controller:業(yè)務(wù)流程和邏輯
MVC的特點:
1)Model 和 View 永遠(yuǎn)不能相互通信耻台,只能通過 Controller 傳遞徙歼。
2)Controller 可以直接讀寫調(diào)用 Model棚辽,Model 通過 Notification 和 KVO 機(jī)制與 Controller 間接通信苍息。
3)Controller 通過 outlet直接操作 View序攘,View 通過 action-target機(jī)制與 Controller 間接通信 穿稳。Controller 同時充當(dāng) View 的delegate(代理)和datasource(數(shù)據(jù)源)存皂。
MVC的缺點:
1、無處安放的網(wǎng)絡(luò)邏輯
現(xiàn)如今的app基本上都需要進(jìn)行網(wǎng)絡(luò)的數(shù)據(jù)交互逢艘,但是網(wǎng)絡(luò)邏輯代碼卻不能被歸類為一個 Model旦袋,一個 view,或是一個控制器它改,所以目前大多數(shù)MVC架構(gòu)的做法是將網(wǎng)絡(luò)邏輯堆積在Controller中疤孕。
2、愈發(fā)臃腫的Controller
Controller 是 app 的 “膠水代碼”央拖,協(xié)調(diào)Model和View之間的所有交互祭阀。Controller不僅有大量的視圖處理邏輯,而且因為Model往往只有模型的定義和少量的業(yè)務(wù)邏輯鲜戒,所以大量的業(yè)務(wù)邏輯也堆積在Controller中专控。
3、可測試性差
由于Controller混合了視圖處理邏輯遏餐、業(yè)務(wù)邏輯以及網(wǎng)絡(luò)邏輯伦腐,分離這些成分的單元測試成了一個艱巨的任務(wù),所以非常不利于開發(fā)人員編寫單元測試失都。
2柏蘑、MVVM
即Model-View-ViewModel,在MVVM里粹庞,正式將View和ViewController聯(lián)系在一起咳焚,可以視為一個組件。
職責(zé):
Model:業(yè)務(wù)模型
View:顯示用戶界面
ViewModel:業(yè)務(wù)邏輯庞溜、View的展示和交互抽象
1革半、View和ViewModel的關(guān)系是通過綁定建立起來的,基于這種綁定關(guān)系,ViewModel只需要改變自身內(nèi)部的屬性督惰,View能對應(yīng)監(jiān)聽到變化而產(chǎn)生相應(yīng)的改變不傅。
注意:View持有ViewModel,因此ViewModel不能持有View赏胚,即ViewModel中不能引入#import UIKit.h,否則就跟?view?產(chǎn)生了耦合商虐,不方便復(fù)用和測試
2觉阅、ViewModel與Model的通信與MVC中Controller與Model通信一致,ViewModel持有Model秘车,Model通過Notification 和 KVO 機(jī)制與 ViewModel 間接通信州既。
MVVM的優(yōu)點:
1烦磁、Controller的解耦
Controller 只是一個中間人,接收 view 的事件、調(diào)用 viewModel 的方法昌跌、響應(yīng) viewModel 的變化;邏輯相關(guān)代碼(包括視圖處理邏輯肢扯,網(wǎng)絡(luò)邏輯等)放入View Model中辫秧。
2、UI組件的復(fù)用
由于展示和邏輯是獨立的模塊妻率,意味著我們就能很方便地拆解和替換其中的模塊乱顾。例如不同業(yè)務(wù)方其中UI展示相近甚至完全一樣,但是數(shù)據(jù)和邏輯根據(jù)業(yè)務(wù)特點單獨定制宫静。在這種情況下走净,我們就可以借助MVVM的優(yōu)勢,實現(xiàn)UI組件的復(fù)用孤里。
3伏伯、易于測試&獨立開發(fā)
將UI與業(yè)務(wù)邏輯隔離起來,使得單元測試更容易進(jìn)行捌袜,可以在測UI邏輯的時候不必運行程序说搅;同時一個同學(xué)可以專注于業(yè)務(wù)邏輯和數(shù)據(jù)的開發(fā)?viewModel,另一個同學(xué)可以專注于頁面設(shè)計琢蛤。
MVVM的缺點:
1蜓堕、數(shù)據(jù)綁定使得Bug?很難被調(diào)試
你看到界面異常了,有可能是你?View?的代碼有?Bug博其,也可能是?Model?的代碼有問題套才。數(shù)據(jù)綁定使得一個位置的?Bug?被快速傳遞到別的位置,要定位原始出問題的地方就變得不那么容易了慕淡。
ReactiveCocoa作用
RAC最大的優(yōu)點是?提供了一個單一的背伴、統(tǒng)一的方法去處理異步的行為,包括?Delegate,Blocks Callbacks傻寂,Target-Action機(jī)制息尺,Notifications和KVO。
所以MVVM模塊之間的綁定關(guān)系可以基于RAC來實現(xiàn)疾掰。