iOS开发中MVVM的使用

1.简言

本章针对iOS开发中的MVVM的实践和使用做一个简单的介绍。

2.什么是MVVM?

iOS开发中大家常用的且苹果官方推荐的开发模式是MVC,那么为什么还会使用MVVM作为开发?
MVC的开发模式设计的初衷是解耦,然而该模式在iOS的开发中不可避免会产生耦合。iOS开发中使用MVC开发有以下的缺点:

View的显示不能摆脱控制器,不可避免会造成view和控制器的耦合
VC的任务繁重,既要处理逻辑,又要控制View的显示,VC里面的代码会非常的臃肿
在这里引入MVVM可以很好的解决上述问题。

MVVM中把原有MVC中的控制器和View统一称为View
MVVM中把逻辑处理,数据封装等放在ViewModel中,减轻了控制器的任务
3.一定要使用MVVM?
答案是否。写代码的规则是低耦合,高聚合,个人认为只要能达到这个效果,无论使用MVC还是MVVM都可以。
以下是在开发中使用MVVM和MVC的一些建议:

如果不理解MVVM,不要生硬的去模仿。写出的代码事与愿违,不仅没有达到MVVM的效果,反而耦合性很强,阅读性很差
合理的使用MVVM和MVC,首先MVVM得使用是有代价的,数据和View的双向绑定建立需要一定的时间。一个简单的功能使用MVC可能很快就能实现,如果使用MVVM还要先进行绑定操作,不可避免造成了时间的浪费。
MVVM中各个角色的持有关系。View可以持有ViewModel,但是ViewModel不可以持有View;ViewModel可以持有Model,Model不可以持有ViewModel。在开发中应该保持这样一个原则,避免写出的MVVM耦合性*强。
4.MVVM中View和Model的双向绑定

绑定关系的建立可以依赖第三方库,如ReactiveCoca相关的库实现绑定
自己实现View和Model的绑定。ViewModel中可以设置Delegate,block,KVO等,用来完成model到view的绑定;另外View中也可以通过ViewModel把View的改变通知到model
5.总结

后续会提供MVC和MVVM相关的Demo源码,请大家参考学习,指正。