MVC
M应该做的事:
- 给ViewController提供数据
- 给ViewController存储数据提供接口
- 提供经过抽象的业务基本组件,供Controller调度
C应该做的事:
- 管理View Container的生命周期
- 负责生成所有的View实例,并放入View Container
- 监听来自View与业务有关的事件,通过与Model的合作,来完成对应事件的业务。
V应该做的事:
- 响应与业务无关的事件,并因此引发动画效果,点击反馈(如果合适的话,尽量还是放在View去做)等。
- 界面元素表达
UIViewController承载了非常多的事情,比如View的初始化,业务逻辑,事件响应,数据加工等等,
我们知道有一件事情Controller肯定逃不掉要做:
协调V和M
。
MVVM
MVVM本质上也是从MVC中派生出来的思想,MVVM着重想要解决的问题是尽可能地减少Controller的任务。
Controller会随着软件的成长,变很大很难维护很难测试。
MVVM是认为Controller做了太多数据加工的事情,所以MVVM把
数据加工
的任务从
Controller
中解放了出来,使得
Controller
只需要专注于数据调配的工作,
ViewModel
则去负责数据加工并通过通知机制让View响应ViewModel的改变。
在MVC的基础上,把C拆出一个ViewModel专门负责数据处理的事情,就是MVVM。
为了让View和ViewModel之间能够有比较松散的绑定关系,于是我们使用ReactiveCocoa。
iOS领域里KVO,Notification,block,delegate和target-action都可以用来做数据通信,从而来实现绑定,但都不如ReactiveCocoa提供的RACSignal来的优雅