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之间的优缺点的主要内容,如果未能解决你的问题,请参考以下文章