MVVM

一、前言


現(xiàn)在網(wǎng)上一抓一大把都是MVVM講解,但是demo大部分都是MVVM+RAC的,較少有用oc現(xiàn)有的如block,delegate等來(lái)充當(dāng)膠水作用的demo。本文附上MVVM+block的demo來(lái)講解MVVM的原理。

源來(lái):

因?yàn)镸VC嚴(yán)重困擾開發(fā)者的問(wèn)題:

厚重的ViewController

遺失的網(wǎng)絡(luò)邏輯(沒(méi)有屬于它的位置)

較差的可測(cè)試性

所以出現(xiàn)了新的架構(gòu)MVVM

二、什么是MVVM


概念:(如圖)

MVVM結(jié)構(gòu)圖

簡(jiǎn)單的說(shuō)就是在MVC的基礎(chǔ)上,把C拆出 個(gè)ViewModel專負(fù)責(zé)數(shù)據(jù)和相關(guān)邏輯處理的東西,就是MVVM。

各個(gè)的作用:

1.view作用:控制視圖的UI。通過(guò)viewModel控制它的顯示,點(diǎn)擊它的控件通過(guò)viewModel刷新model。(由于用block,中間需要vc的膠水作用)

2.viewController的作用:充當(dāng)viewModel和view的膠水作用。

3.viewModel的作用:處理相關(guān)邏輯(業(yè)務(wù),視圖顯示)和網(wǎng)絡(luò)請(qǐng)求,橋接model和view,viewController的作用。

4.model的作用:存儲(chǔ)數(shù)據(jù)。通過(guò)viewModel刷新view的顯示,view點(diǎn)擊事件通過(guò)viewModel刷新自己。(由于用block,中間需要vc的膠水作用)

進(jìn)一步闡述:

姑且將view和viewController看成view

1.在MVVM中,view不能直接引用model,而是通過(guò)引用viewModel來(lái)間接引用model,反過(guò)來(lái)也是不能。

2.view可以引用viewModel ----- (viewModel也可以引用view如loading,最好不要,確保viewModel只處理邏輯和網(wǎng)絡(luò)相關(guān),這樣耦合度更低,也方便測(cè)試)

3.viewModel可以引用model,反過(guò)來(lái)最好不要(保持mvvm純粹的結(jié)構(gòu))

4.viewModel里面應(yīng)該放些什么樣的東西呢?一般viewModel中放置相關(guān)邏輯(業(yè)務(wù),視圖顯示)及網(wǎng)絡(luò)請(qǐng)求

充當(dāng)膠帶作用有(demo僅僅使用block):

ReactiveCocoa(RAC),KVO,Notification,block,delegate和target-action

優(yōu)點(diǎn):

方便測(cè)試:通常來(lái)說(shuō),要進(jìn)行,界面測(cè)試比較困難,而MVVM可以對(duì)viewModel進(jìn)行測(cè)試(還沒(méi)搞過(guò),有時(shí)間搞下下)

方便業(yè)務(wù)的復(fù)用:例如把一些視圖邏輯放在一個(gè)ViewModel里面,讓很多view/ViewController進(jìn)行重用

方便對(duì)職責(zé)進(jìn)行劃分:例如可以讓一些人專門開發(fā)UI,一些人專門開發(fā)邏輯

代碼更加優(yōu)雅,增加可維護(hù)性,耦合度降低

缺點(diǎn):

造成大量膠水代碼:當(dāng)頁(yè)面的交互邏輯非常多時(shí),需要頻繁的在V/VC-VM-M來(lái)回傳遞信息。(所以大家都用RAC就是因?yàn)檫@個(gè)原因,能相對(duì)減少些膠水代碼)

代碼寫起來(lái)會(huì)更費(fèi)勁一點(diǎn)

三、MVVM實(shí)例

1.目錄結(jié)構(gòu)如下:

目錄

view:

view

viewController:

控制器頭文件
控制器初始化
控制器刷新相關(guān)

viewModel:

viewModel

Model:

Model

四、總結(jié):

寫這邊文章主要是通過(guò)一個(gè)簡(jiǎn)單的demo讓不太懂RAC的人先了解下MVVM的基本思想,這里主要是我對(duì)MVVM思想的理解,如果有什么其他想法的,歡迎各位大神不吝賜教,共同進(jìn)步!大家有什么疑惑我們可以在評(píng)論區(qū)交流!

接下來(lái)要干嘛

1.寫篇MVVM +RAC的文章

2.對(duì)viewModel模塊進(jìn)行相關(guān)的單元測(cè)試(聽(tīng)說(shuō)很好用)

五、Demo

代碼地址:github.com/lsj731965675/MVVMTest

本文由簡(jiǎn)書作者原創(chuàng)編寫,轉(zhuǎn)載請(qǐng)保留版權(quán)網(wǎng)址,感謝您的理解與分享!

參考資料:

iOS MVVM+RAC 從框架到實(shí)戰(zhàn)

ReactiveCocoa 和 MVVM 入門

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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