MVVM MVC MVP 到底是什么

3,206 阅读2分钟
原文链接: www.jianshu.com

复杂的软件必须有清晰合理的架构,否则无法开发和维护。在这里简述一下这三种结构的区别。

MVC

MVC(Model-View-Controller)这个应该是应用最广泛也是最早的开发架构。
MVC模式的意思是,软件可以分成三个部分。
视图(View):用户界面。
控制器(Controller):业务逻辑
模型(Model):数据保存


Paste_Image.png


View传送指令到Controller,Controller完成逻辑改变Model状态。Model状态的改变影响View的变化。
举个例子:
在Android程序中,界面中有一个按钮(View),点击按钮,通过网络类进行网络请求(Controller),请求完成通过Bean类存储数据(Model),然后根据数据更新界面显示(View)
所有的通信都是单向的,按钮能够控制网络更新,但是网络类不能更改界面。网络类能更新数据,但是数据类不能控制网络,数据类能更新界面,但是界面类不能更新数据。

MVP

MVP只是将MVC中的C改成了P(Presenter),同时也改变了通信方向。


Paste_Image.png


更部分之间的通信都是双向的,而且view与model不直接发生联系。都是通过Presenter传递。
这种模型也曾风靡一时,曾经我做过的一个项目就是以此为框架的。
这里举一个简单的例子,比如在viewpager中有多个fragmen,每个fragment的布局相似,但是数据模型不同,我们可以让view进行复用,每个view设置不同的Presenter,不同的Presenter有不同的Model,例如,有一个界面展示相关用户列表(数据模型User),一个展示消息列表(数据模型Message)。对于数据的下载处理,可以放在Presenter中,view中不放任何业务处理逻辑,所有的逻辑都在Presenter中。这样更加便于开发和维护。

MVVM

MVVM 模式将 Presenter 改名为 ViewModel,基本上与 MVP 模式完全一致。


Paste_Image.png

唯一的区别是,它采用双向绑定:Model的变动,自动反映在 ViewModel,反之亦然。
由于使用MVP会使Presenter中的代码逻辑变得臃肿,所有用ViewModel代替。ViewModel和View之间不是通信的关系而是绑定的关系。这意味着当你更新viewmodel层的数据的时候,view层会相应的变动ui。
关于更多的MVVM,可以关注一下我的下一篇博客 DataBinding。

*更多的开发知识,可以关注我的公众号:


Paste_Image.png