MVVM
ViewModel 角色定位:
1.目的在于抽离ViewController中展示业务逻辑。
2.视图操作业务等还是放在ViewController中实现。
3.SO,ViewModel层不应该存放任何View对象,更不应该存在Push、Present等视图跳转逻辑。
ViewModel做啥:“处理视图展示”
它的职责之一就是作为一个表现视图显示自身所需数据的静态模型;但它也有收集, 解释和转换那些数据的责任. 这留给了 view (controller) 一个更加清晰明确的任务: 呈现由 view-model 提供的数据。
1.ViewModel负责将数据业务层提供的数据转化为界面展示所需的VO。其与View一一对应,没有View就没有ViewModel。
2.数据流向可以表示为ViewModel->ViewController->View,ViewController负责连接VO及其对应的View对象。
ViewController:
1.现在视图控制器仅关注于用 view-model 的数据配置和管理各种各样的视图, 并在相关用户输入时让 view-model 获知并需要向上游修改数据.
2.ViewController不需要了解关于网络服务调用, Core Data, 模型对象等. (事实上有时通过 view-model 头文件而不是复制一大堆属性来暴漏 model 是很务实的, 后面还会有)
ViewModel与ViewController关系:
1.view-model 会在ViewController上以一个属性的方式存在。
2.ViewController知道 view-model 和它的公有属性,但是 view-model 对ViewController一无所知。
在MVC的基础上,把C拆出一个ViewModel专门负责数据处理的事情,就是MVVM。然后,为了让View和ViewModel之间能够有比较松散的绑定关系,于是我们使用ReactiveCocoa,KVO,Notification,block,delegate和target-action都可以用来做数据通信,从而来实现绑定,但都不如ReactiveCocoa提供的RACSignal来的优雅,如果不用ReactiveCocoa,绑定关系可能就做不到那么松散那么好,但并不影响它还是MVVM。