MVC、MVP、 MVVM
三者的结构分别如图所示。
MVC:Model-----View-----Controller,Model代表模型,大多时候代表的是本地数据或者是网络获取数据的封装类型,数据的获取与加载基本在这里进行;View代表视图层,也就是UI;Controller控制器,获取数据并绑定界面,实现相关的逻辑。MVC容易理解,容易修改,有一定的解耦性,举个简单的例子:在android中,我们的视图View一般以xml的文件布局显示,Model代表我们去加载本地数据或者请求网络获取数据,Activity就是Controller了,我们在Activity下初始化控件,获取数据,并将两者绑定。
MVP:Model----View----Presenter,Model代表数据层,获取存储本地数据或者是网络获取数据;View代表视图层,这里Activity,Fragement也可是说是粗颗粒的View;Presenter代表业务逻辑层,作为Model与View通信的桥梁,完全解耦了Model与View。
MVVM:Model----ViewModel---View,Model代表数据层,数据的存储与获取及网络;ViewModel也代表了逻辑层,但同时会修改View与Model的状态;View视图层。在这里,View与Model进行了双向绑定,也是data-binding,数据的修改会导致View的改变或者View的修改也会导致数据的改变。这种模式有点像ListView与Adapter、数据集合的关系,Adapter就是ViewModel的角色,基于View进行绑定,又与数据集合绑定,当数据发生改变时,调用Adapter的notifyDataSetChange后直接更新View。
MVC 与 MVP 简单比较
MVC中用户可以通过View获取或修改Modeld的状态,也可以通过Controller直接来改变View,三者之间都产生了关联,耦合性还是比较高的,而在MVP中,View不能直接访问Model,两者需要通过Presenter来请求。
MVP 与 MVVM简单比较 MVVM也是从MVP演化的,相对于MVP, VM与V之间是双向bind的,即 VM与View的属性保持一至,MVVM加强了VM与view的关联性。
提供了两种MVP的实现模式:demo地址:点击打开链接