iOS关于MVVM
MVVM基本概念
Model
和MVC中的model一样,可以针对model封装一些额外的逻辑。注意:可以封装与model切身相关的,其他与model非相关的避免出现。
View
由MVC中的view和controller组成,负责UI的展示,绑定viewModel中的属性,出发viewModel中的命令以及呈现viewModel的数据。
ViewModel
viewModel是从MVC的controller中抽取出来的展示逻辑,负责从model中获取view所需的数据,转换成view可以展示的数据。
view从必要的资源(数据库,网络请求,本地缓存等)获取原始数据,根据视图的展示逻辑,处理成view(controller)的展示数据。
viewModel存在的目的在于抽离controller中展示业务的逻辑,而不是替代controller,所以viewModel中不应该出现任何view对象,更不应该存在控制器跳转逻辑。
从上图可知,controller夹在view和viewModel之间做的其中一个主要事情就是将view和viewModel进行绑定。在逻辑上,controller知道应该展示哪个View,Controller也知道应该使用哪个viewModel来提供数据,而view和viewModel之间是互相是不知道的,所以Controller仅关注viewModel的数据配置和管理各种各样的视图。切记,并非是ViewModel去控制什么时候展示View。
MVVM优点
低耦合
视图可以独立与Model变化和修改,一个ViewModel可以绑定到不通的“View”上,当View变化的时候,Model可以不变,当Model变化的时候View也可以不变。
可重用性
可以把一些视图逻辑放在一个ViewModel里面,让很多view重用这段视图逻辑。
独立开发
开发人员可以专注于业务逻辑和数据的开发,设计人员可以专注于页面的设计。
可测试
界面经常是难于测试的,在MVVM中可以针对ViewModel来测试。