MVVM使用实践
因为https://blog.csdn.net/urdfmqcul2/article/details/78788962
,博客搬家至https://juejin.im/user/59fd6315f265da4321536990
这篇博文是针对目前公司所在的团队使用MVVM(具体可以看limboy的博文)的一个问题总结和建议规范,记录在此以作备份。
首先再把这张图拿出来看看:
总结来说,团队在使用MVVM模式的过程当中普遍存在的问题:
什么时候需要建立ViewModel?
ViewModel能否复用?
应该放一些什么样的代码在ViewModel中?
如何优雅地绑定V和VM?
-----------分割线---------------
什么时候需要建立ViewModel?
已经在实践的:
1.ViewController-ViewModel
2.TableViewCell/CollectionViewCell-ViewModel
可扩展的:
任何展示业务逻辑复杂的View,均可以建立其对应的ViewModel(建议在该View需要响应用户事件来改变model时使用),简单的情况下可以通过在头文件暴露subView的readonly指针,由持有ViewModel的View来修改subView的显示;
ViewModel能否复用?
一般情况不建议复用,ViewModel和V(VC)是一个一一对应的关系,ViewModel的复用一般情况下就意味着一个逻辑复杂的View(VC)的复用,这类情况在一般的产品中比较少见,如果强行复用VC带来的问题远比提升的效率要多。
应该放一些什么样的代码在ViewModel中?
很简单,任何对Model的操作都可以移至ViewModel,比如说:获取(网络请求/读数据库/读文件)、存储(远端存储/本地存储)等;
View(VC)在任何时候拿到的Model,都建议从ViewModel中去获取,换句话说,ViewModel是UI数据的来源,数据应该保存在ViewModel中,然后和UI绑定。
如何优雅地绑定V和VM?
目前的绑定关系没有问题,但是需要一个建议规范,View不再直接持有任何Model,而是通过监听ViewModel的result,在任何时候result发生变化,只需要取出ViewModel中的Model,更新UI;