iOS 关于MVVM的一点理解和实战总结
MVVM是近几年一直比较火的架构模式,近期项目使用RAC框架+MVVM写项目,对MVVM这种架构模式有了一些理解。
1.什么是MVVM
网上文章很多,读者自行学习基础知识
M(Model) + V(View/ViewController) + VM(ViewModel)
2.如何在项目中使用
在View/ViewController中创建一个ViewModel,之后所有的数据都从此ViewModel中去获取。比如tableView的dataSource的Arr,就直接从ViewModel中去获取等。
本质上是把所有的本来写在VC中的业务逻辑(比如加载数据,获取显示数据)都放在ViewModel中进行,V/VC只关心数据的绑定(RAC或者KVO),以达到Model的变化直接就影响View的效果(其实是ViewModel中对Model进行了改变,V/VC和ViewModel中的数据绑定后起到改变V的效果)。
3.和MVC架构的对比
使用MVVM后才逐渐发现以前对MVC中对于M的理解的有很大偏差,以前认为M层就是一个单纯的模型,提供一个模型对象供外界方便调用而已。
其实M层的含义远远不止这些,M层应当包含所有关于数据的操作(网络操作,IO操作等),同时向外提供获取数据、修改数据的接口(这些以前都会直接放到Controller中操作)。
如果以这样的方式去理解MVC的架构,C层也能得到很大的释放。只是在数据变化上会通过其他的方式通知View进行变化。所以说以前用MVC的方式写发现的问题很可能是对M层的理解不到位引起的。这样看来,其实MVVM本质上还是没有脱离MVC的结构,不要过于神话。
相关文章
论MVVM伪框架结构和MVC中M的实现机制
被误解的 MVC 和被神化的 MVVM
4.MVVM基于RAC
提到MVVM自然会提到RAC框架。RAC框架的使用核心就是bind
思想,和MVVM的写法十分匹配,使用也非常顺手。
5.总结
MVVM是一个和RAC十分匹配的架构。如果不用RAC项目中按照正确的方式组织M层也能起到相同的效果。如果使用MVVM,同时学习使用RAC框架也是十分值得的,其函数式编程思想,链式编程思想都值得去思索和品味。