因?yàn)?a target="_blank" rel="nofollow">https://blog.csdn.net/urdfmqcul2/article/details/78788962
家制,博客搬家至https://juejin.im/user/59fd6315f265da4321536990
這篇博文是針對(duì)目前公司所在的團(tuán)隊(duì)使用MVVM(具體可以看limboy的博文)的一個(gè)問題總結(jié)和建議規(guī)范漂坏,記錄在此以作備份叮阅。
首先再把這張圖拿出來看看:
總結(jié)來說宴倍,團(tuán)隊(duì)在使用MVVM模式的過程當(dāng)中普遍存在的問題:
什么時(shí)候需要建立ViewModel身腻?
ViewModel能否復(fù)用漏策?
應(yīng)該放一些什么樣的代碼在ViewModel中?
如何優(yōu)雅地綁定V和VM只估?
-----------分割線---------------
什么時(shí)候需要建立ViewModel?
已經(jīng)在實(shí)踐的:
1.ViewController-ViewModel
2.TableViewCell/CollectionViewCell-ViewModel
可擴(kuò)展的:
任何展示業(yè)務(wù)邏輯復(fù)雜的View着绷,均可以建立其對(duì)應(yīng)的ViewModel(建議在該View需要響應(yīng)用戶事件來改變model時(shí)使用)蛔钙,簡(jiǎn)單的情況下可以通過在頭文件暴露subView的readonly指針,由持有ViewModel的View來修改subView的顯示荠医;
ViewModel能否復(fù)用吁脱?
一般情況不建議復(fù)用,ViewModel和V(VC)是一個(gè)一一對(duì)應(yīng)的關(guān)系彬向,ViewModel的復(fù)用一般情況下就意味著一個(gè)邏輯復(fù)雜的View(VC)的復(fù)用兼贡,這類情況在一般的產(chǎn)品中比較少見,如果強(qiáng)行復(fù)用VC帶來的問題遠(yuǎn)比提升的效率要多娃胆。
應(yīng)該放一些什么樣的代碼在ViewModel中遍希?
很簡(jiǎn)單,任何對(duì)Model的操作都可以移至ViewModel里烦,比如說:獲仍渌狻(網(wǎng)絡(luò)請(qǐng)求/讀數(shù)據(jù)庫/讀文件)、存儲(chǔ)(遠(yuǎn)端存儲(chǔ)/本地存儲(chǔ))等胁黑;
View(VC)在任何時(shí)候拿到的Model废封,都建議從ViewModel中去獲取,換句話說丧蘸,ViewModel是UI數(shù)據(jù)的來源漂洋,數(shù)據(jù)應(yīng)該保存在ViewModel中,然后和UI綁定力喷。
如何優(yōu)雅地綁定V和VM刽漂?
目前的綁定關(guān)系沒有問題,但是需要一個(gè)建議規(guī)范弟孟,View不再直接持有任何Model爽冕,而是通過監(jiān)聽ViewModel的result,在任何時(shí)候result發(fā)生變化披蕉,只需要取出ViewModel中的Model颈畸,更新UI乌奇;