浅谈MVP、MVC 、MVVM模式

从学安卓以来一直都是使用的MVP模式,记得当时学长学姐说MVP模式方便管理,方便单元测试。就一直这样用着了,中间也单独拿出来看过两次,但是没有一个很深的印象。

最近被问到,MVP模式的优缺点是什么,跟MVC、MVVM有什么区别,一下懵住了,就记得方便管理,其他的什么都想不起来了。

这里浅浅记录一下。

MVC模式

MVC模式中   M层指的是Model(模型),V层指的是View(视图),C层指的是Controller(控制器)

M层:写的是JavaBean实体类,保存示例数据

V层:显示数据,接收用户输入,提供界面与用户交互

C层:更新UI界面和数据实例

MVC中的activity属于V层,但同时又包含了一些Controller一些相关的东西,这样在写到相同内容的时候会需要重复写很多次,使代码变臃肿了耦合度也高,不利于开发和维护。比如,View层接受用户的输入,然后通过Controller修改对应的Model实例;同时,当Model实例的数据发生变化的时候,需要修改UI界面,可以通过Controller更新界面。这种操作可行,但是没必要。

优点:使视图和数据分离,对于开发大型软件来说更方便进行模块的划分,提高编码速度与质量

MVP模式

MVP模式中  M层指的是Model(模型),V层指的是View(视图),P层指的是Presenter(表示器)

M层:提供想要展示在View层的数据和具体业务逻辑的处理实现

V层:显示数据,接收用户输入,提供界面与用户交互

P层:直接定义处理View的方法、传递M层对V层的处理、V层对M层的回应处理

MVP把Activity中的UI逻辑抽象成View接口,把业务逻辑抽象成Presenter接口,Model类还是原来的Model。

这种将M层与V层分开处理一个最合理的理由就是,Android中的UI操作是异步的,得在主线程里面操作。

P层与V、M层的交互使用接口定义操作,可以进一步达到松耦合的目的也更方便做单元测试。

与MVC相比MVP的优势就是:

1、Activity只处理生命周期的任务,代码变得更加简洁

2、Presenter被抽象成接口,可以有多种具体的实现,所以方便进行单元测试

3、把业务逻辑抽到Presenter中去,避免后台线程引用着Activity导致Activity的资源无法被系统回收从而引起内存泄露和OOM

4、分离了视图逻辑和业务逻辑,降低了耦合

MVVM模式

MVVM模式中  M层指的是Model(数据层),V层指的是View(视图层),VM层指的是ViewModel(关联层)

M层:主要负责网络数据操作,File文件操作,本地数据库操作

V层:主要负责布局加载和UI交互

VM层:负责数据变化自动更新绑定的View以及View的操作更新绑定的数据

MVVM与MVP区别不是很大,他也降低了耦合,注重组件化,主要把V和M绑定到一起了。

优点:View和Model是双向绑定的,使开发者不用专注于更新视图,只需要专注于实现业务逻辑,绑定了Model简化了Model的逻辑控制

缺点:

使页面异常追踪变得复杂,因为可能是View导致的bug,也可能是Model导致的;

数据双向绑定不利于代码复用,View都绑定了一个Model,不同模块的Model都不同,就不能复用View;

Model 长期持有,不释放内存,就造成了花费更多的内存;

MVVM的搭建可以参考这里:Android MVVM框架搭建(一)ViewModel + LiveData + DataBinding - 腾讯云开发者社区-腾讯云

猜你喜欢

转载自blog.csdn.net/weixin_56691212/article/details/126672235