MVC,MVP和MVVM之间的优缺点

Posted DullFan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MVC,MVP和MVVM之间的优缺点相关的知识,希望对你有一定的参考价值。

文章目录


前言

2021-4-17学习


提示:以下是本篇文章正文内容,下面案例可供参考

一、MVC

1.什么是MVC

MVC 模式(Model–view–controller)是软件工程中的一种软件架构模式,它把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller)。

Model(数据模型):
数据层,负责处理业务逻辑,监听网络或数据库接口

View(视图):
界面(UI)层,显示来源于Model的数据

Controller(控制器):
逻辑层,传递用户的交互和更新Model的数据在android中,Activity/Fragment既有View的性质,也具有Controller的性质,导致Activity/Fragment很重,MVC中的View会与Model直接交互,所以Activity/Fragment与Model的耦合性很高

2.MVC的特点

1.MVC主要实现关注点分离,即应用程序中的数据模型与展示逻辑解耦.在客户端web开发中.就是将模型(M-数据,操作数据),视图(V-显示数据的html元素)之间实现代码的分离,松散耦合,使之成为一个更容易开发,维护和测试的客户端应用程序

2.MVC的所有通信都是单向的

3.view传送指令到Controller(用户也可以直接将指令传到Controller)

4.Controller完成业务逻辑后要求Model改变状态

5.Model将新的数据发送到View,用户得到反馈

3.MVC的流程

MVC流程分为两种:

一种是通过View接收指令,传递给Controller,然后对模型进行修改或者查找底层数据,最后把改动渲染在视图上

另一种是通过Controller接受指令,传给Controller

3.MVC的优点

1.耦合性低,视图层和业务层分离,这样就允许更改视图层代码而不用重新编译模型和控制器代码

2.重用性高

3.生命周期成本低

4.MVC使开发和维护用户接口的技术含量降低

5.可维护性高,分离视图层和业务逻辑层也使得WEB应用更易于维护和修改

6.部署快

3.MVC的缺点

1.不适合小型,中等规模的应用程序,花费大量时间将MVC应用到规模并不是很大的应用程序通常会得不偿失。

2.视图与控制器间过于紧密连接,视图与控制器是相互分离,但却是联系紧密的部件,视图没有控制器的存在,其应用是很有限的,反之亦然,这样就妨碍了他们的独立重用。

3.视图对模型数据的低效率访问,依据模型操作接口的不同,视图可能需要多次调用才能获得足够的显示数据。对未变化数据的不必要的频繁访问,也将损害操作性能。


二、MVP

1.什么是MVP

MVP 全称:Model-View-Presenter ;MVP 是从经典的模式 MVC 演变而来,它们的基本思想有相通的地方:
Controller/Presenter 负责逻辑的处理,Model 提供数据,View 负责显示。

Model(数据模型):
业务逻辑和实体模型,用来操作实际的数据,包含Bean和Model的抽象接口来降低耦合。

View(视图):
就是Android中的视图,需要建立一个View的抽象接口View Interface。通过实现View的接口来实现View与Presenter的交互,从而降低耦合。对应于Activity,负责View的绘制与用户交互;

Presenter:
View和Model的中间枢纽,处理和用户交互的逻辑。

1.MVP的特点

1.将MVC中的Controller变为Presenter,同时改变了通信方向,View与MOdel隔离,Presenter负责完成View层与Model层的交互

2.各个部分之间的通信都是双向的

3.View与Model不发生联系,都通过Presenter传递

4.View非常薄,不部署任何业务逻辑,称为"被动视图",即没有任何主动性,而Presenter非常厚,所有逻辑都部署在这里

2.MVP的流程

3.MVP的优点

1.模型与视图完全分离,我们可以修改视图而不影响模型;

2.可以更高效地使用模型,因为所有的交互都发生在一个地方——Presenter内部;

3.我们可以将一个Presenter用于多个视图,而不需要改变Presenter的逻辑。这个特性非常的有用,因为视图的变化总是比模型的变化频繁;

4.MVP的缺点

视图和Presenter的交互会过于频繁,使得他们的联系过于紧密。也就是说,一旦视图变更了,presenter也要变更

二、MVVM

1.什么是MVVM

响应式,双向数据绑定,即MVVM。是指数据层(Model)-视图层(View)-数据视图(ViewModel)的响应式框架。它本质上是MVC 的改进版

M-Model:数据提供。Model在程序中专门用于提供数据,不管是网络请求获得的数据,还是数据库获得的数据,统统写在Model里。Model层独立性相当强,它只用来提供数据,而不管数据是用来做什么的。

V-View:视图元素和视图元素初始化。View在Android中指代的就是我们常见的布局文件和Activity中的元素初始化部分。总之,所有一切我们在Android上肉眼能看见的东西都是View。在View层里,我只对UI做初始化,比如将TextView设置字体大小,为Banner控件设置滚动速度等等,这些大多可以直接在布局文件中完成。

ViewModel:操作业务数据,并将数据呈现在View上。

2.MVVM的优点

MVVM会让你的程序完全解耦

可重用性:你可以把一些视图逻辑放在一个ViewModel里面,让很多view重用这段视图逻辑

独立开发:开发人员可以专注于业务逻辑和数据的开发(ViewModel),设计人员可以专注于页面设计,使用Expression Blend可以很容易设计界面并生成xml代码

可测试:界面素来是比较难于测试的,而现在测试可以针对ViewModel来写

3.MVVM的缺点

MVVM不会提升程序的性能,甚至用不好还会降低程序的性能

MVVM会增大代码的总量

总结

Demo:https://github.com/DullFan/StudyAndroid 代码在frameworktest包下

以上是关于MVC,MVP和MVVM之间的优缺点的主要内容,如果未能解决你的问题,请参考以下文章

mvc mvp mvvm的区别

Android 中 MVC、MVP 和 MVVM 对比

mvc-mvp-mvvm架构调研及实现--分布式课程思考题--zzb

杂谈: MVC/MVP/MVVM

iOS学习之MVC,MVVM,MVP模式优缺点

Android App的设计架构:MVC,MVP,MVVM与架构经验谈