MVVM模式快速入門

ygfb 10年前發布 | 22K 次閱讀 MVVM
 

MVVM開發模式是一個比較新的技術,國內對這個模式的文檔大都是翻譯國外的,而且文檔也比較少,對于新手來說入門也是比較困難的,那么今天我就把我所理解的一些關于MVVM的思考分享一下,幫助大家快速入門。

MVC模式想必大家都很熟悉了,到處都是用這個模式,我從編程入門就一直接觸這個模式,壓根就不知道MVVM模式。MVC模式分為 Model,View,Controller三層,Model負責數據層,Controller負責業務邏輯層,View負責界面顯示層,所以可以讓不同 的View使用用一個Controller層,程序擴展性比較好。所以我就不必多說這個模式了好處了。

那么我就就來談談MVC模式的壞處:不知道大家有沒有感覺自己做iOS開發的時候一個tableViewController里面的代碼好多好多,自己想找個方法就要找很久,以為找到了更新UI的方法,不料卻是一個網絡請求的方法,my god

開始吐槽:

  • 你既然叫ViewController為什么網絡請求的任務也要交給你
  • 你既然叫ViewController為什么數據解析的任務也要交給你?
  • 你既然叫ViewController為什么數據存儲的任務也要交給你?
  • 你既然叫ViewController為什么你管那么多事?為什么不好好負責你的View啊????

吐槽完畢:

大家是不是看到了不好的地方,那么我們就要改MVC,怎么改呢?

  • 你既然叫ViewController是吧,那么你就負責View的顯示和更新,其他業務邏輯不需要你管,把你和View層綁在一起了,你們兩個就負責一層就行了。

  • 對于Model層,你還給我負責數據層就行了

  • 那么業務邏輯層呢?

  • 業務邏輯層我就在ViewController層和Model層之間再添加一個ViewModel層就行了,讓他負責業務邏輯,負責網絡請求和數據解析。

大家可以感受一下下面這個圖:

MVVM模式快速入門
這里寫圖片描述

這個圖很好的詮釋了MVC模式和MVVM模式的差別。

也就是說MVVM模式是MVC模式的升級版。

那么現在我們可以說ViewController從ViewModel層中讀取數據然后顯示在View上,他并不和Model層直接打交道,和Model層直接打交道的是ViewModel層。

下面我們就解釋一下MVVM模式每層之間怎么通訊的

MVVM模式快速入門
這里寫圖片描述

其實ViewController中會包含一個viewmodel的對象,View層需要變化,可以直接讓這個對象調用ViewModel的方法 獲取數據,ViewModel層獲得數據然后保存Model中,但是ViewModel層獲取的數據怎么才能告訴ViewController層刷新UI 呢?

MVVM模式快速入門
這里寫圖片描述

方法1:使用block回調

可以在獲取數據調用一個block回調,然后在ViewController中更新UI數據在swift中是閉包。

//獲取數據然后有一個block回調 -(void)topRefreshWithCallBack: (callback)callback;

方法2:使用reactiveCocoa庫

github地址: reactiveCocoa

這個庫包含了函數式編程和響應式編程。其實reactiveCocoa庫就是MVVM模式的核心。

用法可以參考:

ReactiveCocoa入門教程——第一部分

ReactiveCocoa入門教程——第二部分

關于MVVM更好的介紹,請參考我實現的一個小demo

請使出九牛二虎之力來點擊我

喜歡就關注我的博客吧??

我的博客地址:( http://www.codertian.com )

 本文由用戶 ygfb 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!