为了便于MVVM重构后代码维护方便,特制定以下规范:
一、职责:
VC(即ViewController)的职责:
1)处理页面布局以及页面的生命周期(viewDidLoad,ViewWillAppear等)
2)响应页面上的所有交互,包括按钮点击、手势等
3)监听VM中数据的变化,订阅信号,根据信号的内容来作出相应的变化。
4)管理与页面相关VM的创建和销毁
VM(即ViewModel)的职责:
1)处理网络请求、读写本地缓存,以及这些操作相应的视图逻辑(包括提示框、页面跳转等)的信号输入
2)保存视图展现所需的数据,包括在VC初始化时需要的数据
3)处理不依赖于页面的其他逻辑(比如保存登录过的用户名)
二、创建VM的一些规则:
1)一种类型的业务只创建一个VM
2)一个页面对应多种业务的,可以创建多个VM
3)划分的粒度要尽量细,做到相似的业务逻辑可使用同一个VM。可以按照网络接口来划分。(如QMLoginVM)
三、VC与VM的通信方式:
通过ReactiveCocoa 的信号进行挂接
1) 网络请求统一用RACSignal处理,在signal的block中执行请求,收到响应后再发送next信号,传递status给VC。status不用保存在VM中。
2)VC中订阅signal,根据next信号的status值,来进行相应的操作。
3)提示框的显示或关闭、按钮的enable状态等可以单独使用RACSubject信号来处理, 由VM中输入信号,VC中订阅。
4)对于tableView所需的数据,统一在VM中保存数据,VC中通过RACObserve或者KVO进行监听。
四、block与delegate
网络框架同时支持block和delegate两种方式,开发时按模块来区分,如果之前的代码是用delegate,就继续用delegate,反之亦然;如果是新开发的模块,则按自己的偏好来选择。