MVVM
ViewModel 角色定位:
1.目的在于抽離ViewController中展示業(yè)務(wù)邏輯。
2.視圖操作業(yè)務(wù)等還是放在ViewController中實現(xiàn)篡腌。
3.SO碱璃,ViewModel層不應(yīng)該存放任何View對象弄痹,更不應(yīng)該存在Push、Present等視圖跳轉(zhuǎn)邏輯嵌器。
ViewModel做啥:“處理視圖展示”
它的職責(zé)之一就是作為一個表現(xiàn)視圖顯示自身所需數(shù)據(jù)的靜態(tài)模型;但它也有收集, 解釋和轉(zhuǎn)換那些數(shù)據(jù)的責(zé)任. 這留給了 view (controller) 一個更加清晰明確的任務(wù): 呈現(xiàn)由 view-model 提供的數(shù)據(jù)肛真。
1.ViewModel負(fù)責(zé)將數(shù)據(jù)業(yè)務(wù)層提供的數(shù)據(jù)轉(zhuǎn)化為界面展示所需的VO。其與View一一對應(yīng)爽航,沒有View就沒有ViewModel蚓让。
2.數(shù)據(jù)流向可以表示為ViewModel->ViewController->View,ViewController負(fù)責(zé)連接VO及其對應(yīng)的View對象岳掐。
ViewController:
1.現(xiàn)在視圖控制器僅關(guān)注于用 view-model 的數(shù)據(jù)配置和管理各種各樣的視圖, 并在相關(guān)用戶輸入時讓 view-model 獲知并需要向上游修改數(shù)據(jù).
2.ViewController不需要了解關(guān)于網(wǎng)絡(luò)服務(wù)調(diào)用, Core Data, 模型對象等. (事實上有時通過 view-model 頭文件而不是復(fù)制一大堆屬性來暴漏 model 是很務(wù)實的, 后面還會有)
ViewModel與ViewController關(guān)系:
1.view-model 會在ViewController上以一個屬性的方式存在凭疮。
2.ViewController知道 view-model 和它的公有屬性,但是 view-model 對ViewController一無所知串述。
在MVC的基礎(chǔ)上执解,把C拆出一個ViewModel專門負(fù)責(zé)數(shù)據(jù)處理的事情,就是MVVM。然后衰腌,為了讓View和ViewModel之間能夠有比較松散的綁定關(guān)系新蟆,于是我們使用ReactiveCocoa,KVO右蕊,Notification琼稻,block,delegate和target-action都可以用來做數(shù)據(jù)通信饶囚,從而來實現(xiàn)綁定帕翻,但都不如ReactiveCocoa提供的RACSignal來的優(yōu)雅,如果不用ReactiveCocoa萝风,綁定關(guān)系可能就做不到那么松散那么好嘀掸,但并不影響它還是MVVM。