MVC,MVP和MVVM架构解析

三种架构模式——MVC、MVP、MVVM MV系列框架中,M和V分别指Model层和View层,但其功能会因为框架的不同而变化。Model层是数据模型,用来存储数据;View层是视图,展示Model层的数据。虽然在不同的框架中,Model层和View层的内容可能会有所差别,但是其基础功能不变,变的只是数据的传输方式 。本文讲解MVC、MVP和MVVM三种架构模式。 阅读详情


关于架构,框架和设计模式三者的说明

  • 架构
    架构是一种代码的管理方案,用来提高代码的可读性和可维护性,MVC,MVP,MVVM,或者自己对自己项目代码的管理方案都可以称为架构
  • 框架
    框架是一种业务处理方案,是帮你写好的东西,已经完成部分业务,继承到自己项目中完成项目中部分功能,像okHttp,Retrofit,Glide等第三方库可以成为框架
  • 设计模式
    设计模式是功能的实现方案,是能达到某种目的的一种代码的写法,以后也会对各种设计模式进行详细的讲解

一、MVC

1.概念

MVC, 即Model-View-Controller, 基于页面逻辑的修改要多于业务逻辑, 分离两种逻辑减少类代码的修改

2.结构

  • Model: 即数据层, 负责处理业务逻辑, 监听网络与数据库接口
  • View: 即界面(UI)层, 显示来源于Model的数据
  • Contoller: 即逻辑层, 传递用户的交互和更新Model的数据
    MVC

3.模式

根据MVC架构, View和Controller都会依赖于Model, View显示Model数据, Controller更新Model数据. Model从项目中分离后, 独立于UI, 允许测试. 更新Model方式的不同, 把MVC架构分为被动(Passive)模式和主动(Active)模式.

  • 被动模式:在被动模式中, Controller是唯一操作Model的类. 基于用户的响应事件, Controller通知Model更新数据. 在Model更新后, Controller通知View更新UI, View从Model中获取数据
    被动模式
  • 主动模式:在主动模式中, Controller不是唯一操作Model的类, Model存在自更新机制. 在更新数据时, Model层使用观察者(Observer)模式通知View和其他类. View实现观察者的接口, 在Model中, 注册成为观察者, 接收通知.
    在这里插入图片描述
    当Model层发生数据更新时, 告知全部观察者. View从Model中更新数据.
    在这里插入图片描述

4.优缺点

  • 优点:MVC模式, 分离类的UI与业务职责, 增加可测试性与可扩展性. Model不引用任何Android类, 允许单元测试(Unit Test). Controller含有View的引用, 不引用Android类, 允许单元测试. View满足单一职责原则(SRP), 传递事件至Controller, 展示Model数据, 不包含业务逻辑, 允许UI测试.
  • 缺点:
    1.View既依赖于Controller又依赖于Model. 在修改UI逻辑时, 也需要修改Model, 降低架构的灵活性. View与Model的职责部分重叠, 过于耦合, 在处理UI逻辑时, 被动模式与主动模式都会产生若干问题.
    2.在被动模式中, Controller通知Model更新数据, 并通知View显示. 对于UI逻辑, 如果View处理, 单元测试会遗漏逻辑; 如果Model处理, 则隐式地依赖于View, 导致模块增加耦合
    3.MVC架构含有致命问题, 即View同时含有Controller与Model的引用; UI逻辑同时存在于View与Model之间. 这些问题导致业务逻辑与UI逻辑无法分离, 增加模块耦合, 影响重构. 这些问题在MVC的进化版MVP中逐步解决.

5.适用场景

项目体量较小,维护频率不高的应用

二、MVP

1.概念

MVP属于MVC的演化版本,目的是让Model和View完全解耦

2.结构

  • View:对应于Activity,负责View的绘制以及与用户交互
  • Model:业务逻辑和实体模型
  • Presenter:负责完成View于Model间的交互

3.与MVC对比

  • MVC下的数据走向
    在这里插入图片描述
  • MVP下的数据走向
    在这里插入图片描述
  • 与MVC的区别对比
    最明显的区别就是,MVC中是允许Model和View进行交互的,而MVP中很明显,Model与View之间的交互由Presenter完成。还有一点就是Presenter与View之间的交互是通过接口的
    在这里插入图片描述

4.优缺点

  • 优点:
    1.降低耦合度
    2.模块职责划分明显
    3.利用测试驱动开发
    4.代码复用
    5.代码灵活度增加
  • 缺点:
    由于对视图的渲染放在了Presenter中,所以视图和Presenter的交互会过于频繁。如果Presenter过多地渲染了视图,往往会使得它与特定的视图的联系过于紧密。一旦视图需要变更,那么Presenter也需要变更了

5.适用场景

项目如果过于庞大,且需要频繁对于VIEW进行调整或者变更的项目不适用于此模式常规的中小型应用适合于当前业务需求


三、MVVM

1.结构

  • Model:数据层,包含数据实体和对数据实体的操作
  • ViewModel:关联层,将Model和View进行绑定,Model或者View更改时,实时刷新对方。ViewModel只做和业务逻辑相关的工作,不涉及任何和UI相关的操作,不持有控件引用,不更新UI
  • View只做和UI相关的工作,不涉及任何业务逻辑,不涉及操作数据,不处理数据。UI和数据严格的分开

2.解析

在这里插入图片描述

  • View显而易见Activity/Fragment便是MVVM中的View,当收到ViewModel传递过来的数据时,Activity/Fragment负责将数据以你喜欢的方式显示出来。View还包括ViewDataBinding,图中并没有体现。
  • ViewModelViewModel作为Activity/Fragment与其他组件的连接器。负责转换和聚合Model中返回的数据,使这些数据易于展示,并把这些数据改变即时通知给Actvity/Fragment。ViewModel是具有生命周期意识的,当Activity/Fragment销毁时ViewModel的onClear方法会被回调,你可以在这里做一些清理工作。LiveData是具有生命周期意识的一个可观察的数据持有者,ViewModel中的数据有LiveData持有,并且只有当Activity/Fragment处于活动时才会通知UI数据的改变,避免无用的刷新UI。
  • ModelRepository及其下方就是model了。Repository负责提取和处理数据。数据来源可以是本地数据库,也可以来自网络,这些数据统一有Repository处理,对应隐藏数据来源以及获取方式。
  • Binder绑定器Android中的数据绑定技术由DataBinding和LiveData共同实现。当Activity/Fragment接收到来自ViewModel中的新数据时(由LiveData自动通知数据的改变),将这些数据通过DataBinding绑定到ViewDataBinding中,UI将会自动刷新。

3.MVVM架构本质

1.解耦,区别于MVC不会产生巨量代码,区别于MVP不会产生大量接口
2.职责更加明确,在mvp模式中,p需要持有V的引用,才能去刷新UI,在MVVM模式中,View和Model使用databingding进行双向绑定,一方改变会直接通知另外一方,使得viewModel能专注于业务逻辑的处理,而不需要去关心UI刷新

4.DataBinding和MVVM关系

MVVM是一种架构模式,DataBinding是一个实现数据和UI绑定的框架,是实现MVVM模式的工具

5.优缺点

  • 优点:
    1.使得M,V,VM的解耦更加彻底,在mvp模式中,p需要持有V的引用,才能去刷新UI,在MVVM模式中,View和Model使用databingding进行双向绑定,一方改变会直接通知另外一方,使得viewModel能专注于业务逻辑的处理,而不需要去关心UI刷新
    2.不会像MVC一样导致Activity中代码量巨大,也不会像MVP一样出现大量的View接口(Presente与View是通过接口进行交互的)。项目结构更加低耦合。

  • 缺点:
    1.数据绑定使得Bug很难被调试
    2.一个大的模块中,model也会很大,虽然使用方便了也很容易保证了数据的一致性,但是长期持有,不释放内存,就造成了花费更多的内存
    3.数据双向绑定不利于代码重用。客户端开发最常用的重用时View,但是数据双向绑定技术,让你在一个View都绑定了一个model,不同模块的model都不同,那就不能简单重用View了

6.适用场景

业务处理逻辑大多数在后端的情况下前端只要做展示而不需要做大量的业务处理的项目

MVC、MVP、MVVM三种模式的介绍及区别(代码例子说明) 主要介绍几种架构模式,以及之间的区别 阅读详情

相关推荐

一文带你全面了解MVC、MVP、MVVM模式(实例讲解)

前言 在Android开发中,当你梳理完需求后,你要做的并不是马上写下你的第一行代码,而是需先设计好整个项目的技术框架 今天,我将全面介绍Android开发中主流的技术框架MVC、MVP 与 MVVM模式,并实例讲解MVP模式,希望您们会喜欢。 目录 1. 为什么要进行技术框架的设计 模块化功能 使得程序模块化,即:内部的高聚合、模块之间的低耦合 提高开发效率 开发人员只...

weixin_45365889的博客 1495

MVC、MVP、MVVM

MVC 中的 Controller 只知道 Model 的接⼝,因此它没有办法控制 View 层的更新,MVP 模式中,View 层的接⼝暴露给了 Presenter 因此可以在 Presenter 中将 Model 的变化和 View 的变化绑定在⼀起,以此来实现 View 和 Model 的同步 更新。因此当Model中的数据改变时会 触发View层的刷新,View中由于⽤户交互操作⽽改变的数据也会在Model中 同步。模型与视图完全分离。创建数据,并提供访问、修改数据的接口,执行修改数据之后的操作。

Camellia_77的博客 1237

深入理解Android架构:MVC、MVP、MVVM与DataBinding

在软件工程中,MVC(Model-View-Controller,模型-视图-控制器)是一种用于组织代码以分离内部表示(模型),用户界面(视图),以及控制逻辑(控制器)的设计模式。MVC架构通过将应用程序的这三个核心组件分离开来,不仅可以提高系统的可维护性和可扩展性,还能提供更大的灵活性。DataBinding库是Android官方提供的一个用于绑定数据到界面元素的库。

weixin_35950531的博客 445

深入解析 Vue 架构:MVVM、MVC 和 MVP 模式的区别与实战对比

本文将深入探讨 Vue 框架中涉及的几种经典软件架构模式。通过详细的对比分析、流程图示以及代码示例,为您揭示 MVC、MVP 与 MVVM 在 Vue 环境下的运作机制及其显著差异。帮助开发者理解 Vue 为何采用 MVVM 模式,以及如何在不同模式下编写代码。

✨ 欢迎来到【Seal ^_^ 的优快云博客】!✨ 1517

使用electron静默打印

使用electron静默打印 1.使用electron打印的理由 很多情况下程序中使用的打印都是用户无感知的。并且想要灵活的控制打印内容,往往需要借助打印机给我们提供的api再进行开发,这种开发方式非常繁琐,并且开发难度较大。 electron提供的打印api可以非常灵活的控制打印设置的显示,并且可以通过html来书写打印内容。 2.api ele...

w1366352655的博客 945

mysql笔记:23. 在Mac上安装与卸载MySQL

MySQL对Mac电脑的适配十分强大,再加上Mac本身就是Unix操作系统演化而来的,所以在Mac上安装MySQL的方式有多种。常见的方法有如下三种:DMG、brew、TAR。介绍这些方法前,我们先了解下MySQL安装文件的下载。

斌斌(Java) 2248

架构MVC, MVVM和MVP解析

作者: 阮一峰 日期: 2015年2月 1日 复杂的软件必须有清晰合理的架构,否则无法开发和维护。 MVC(Model-View-Controller)是最常见的软件架构之一,业界有着广泛应用。它本身很容易理解,但是要讲清楚,它与衍生的 MVP 和 MVVM 架构的区别就不容易了。 昨天晚上,我读了《Scaling Isomorphic Javascript C

专注 web 全栈与服务端实战,可视化、Linux 部署、AI 编程工具干货持续更新,沉淀项目落地踩坑笔记。 291

Docker安装Nacos(详细教程)

Docker安装Nacos的步骤相对直接,但需要注意一些细节以确保安装成功。

weixin_73060959的博客 1405

Android架构设计之MVC/MVP/MVVM浅析

目录 写在前面 一、案例演示 二、MVC模式 2.1、MVC简介 2.2、MVC模式的使用 2.3、MVC模式的缺点 三、MVP模式 3.1、MVP简介 3.2、MVP模式的作用 3.3、MVP模式的使用 3.4、MVP模式的缺点 四、MVVM模式 4.1、MVVM简介 4.2、Data Binding简介 4.3、Data Binding的常见使用 4.4、MVV...

江湖人陆仁甲 814

MIKE水动力笔记1_岸线及水深数据之依靠全球数据库资源提取的方法

通过各种数据库资源来获取全球岸线及水深数据,这种方法获取的岸线及水深数据精度偏低,比较适合大尺度范围的水动力研究。

晏长街的博客 1万+

从0到1打造一台机器人走起来

1)本体机械结构设计,依据人体生物学和生物力学知识,结合机器人运动时各关节扭矩需求,进行合理选用电机,比如胯部需要大扭矩,腿部惯量小等2)硬件拓扑上,分层架构的信号层和功率协同工作,高带宽,低延时,硬实时3)步态规划设计与验证环节实机回溯和部署过程:Real2Sim,Sim2Sim,Sim2Real。

weixin_43163941的博客 243

MVC、MVP、MVVM架构模式与多层架构

title: MVC、MVP、MVVM架构模式与多层架构 date: 2019-07-21 22:52:35 tags: MVC MVP MVVM 三层架构(3-tier application) 多层架构(n-tier application) 一、架构模式 1.1 概要: MVC、MVP、MVVM是目前较为主流的三种架构模式,使用架构模式的目的是为了解决界面呈现和逻辑代码分离问题,其中...

Where_dWanaGo的博客 1053

基于 transformer、lstm、LSTM多特征的交通流量预测 完整数据代码 超全项目 本科硕士毕设卓卓有余

基于 transformer、lstm、LSTM多特征的交通流量预测 完整数据代码 超全项目 本科硕士毕设卓卓有余

4655

MVP、MVC和MVVM设计架构

1、MVVM定义 MVVM是Model-View-ViewModel的简写,即模型-视图-视图模型。【模型】指的是后端传递的数据。【视图】指的是所看到的页面。【视图模型】mvvm模式的核心,它是连接view和model的桥梁。它有两个方向:一是将【模型】转化成【视图】,即将后端传递的数据转化成所看到的页面。 实现的方式是:数据绑定。二是将【视图】转化成【模型】,即将所看到的页面转化成后端的数据...

s1120080286的专栏 357

【图像超分】论文复现:Pytorch实现SRCNN!保姆级复现教程!提供完整代码和最优权重模型(x2、x3、x4)!科研级论文曲线图!计算平均PSNR和SSIM!代码Windows和Linux都可用!

由于很多同学反应没用过jupyter notebook,更习惯用pycharm项目的形式跑代码。于是,本文将用pycharm项目的形式,重新复现SRCNN!【图像超分】论文复现:新手入门!Pytorch实现SRCNN,数据预处理、模型训练、测试、评估全流程详解,注释详细,简单修改就可以训练你自己的图像数据,有训练好的模型下载地址,随取随用。

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 4702

社会网络仿真软件:NetLogo_(14).社会网络数据导入与导出

在NetLogo中,社会网络的仿真不仅依赖于模型的内部逻辑,还需要能够灵活地导入和导出数据。这使得用户可以利用外部数据来初始化模型,或者将模型的运行结果导出以便进一步分析。本节将详细介绍如何在NetLogo中实现社会网络数据的导入和导出,包括常见的数据格式和具体的代码示例。

kkchenjj的博客 600

android 架构 MVC 、MVP、 MVVM对比

转自Android中的MVC、MVP、MVVM MVC MVC的全称是Model-View-Controller,也就是模型-视图-控制器。 在Android中View层一般由XML布局文件充当。在Model层中我们会进行一些数据处理的工作,比如网络数据请求、数据库操作等。Controller层通常由Activity、Fragment充当,并在其中进行界面、数据相关的业务处理。 可见在Android中,作为Controller的Activity或Fragment主要起到的作用就是解耦,将View和Mod

skyang在路上 2485

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

MVC、MVP与MVVM架构详解

本文对比分析了前端开发中三种主流架构模式:MVC、MVP和MVVM。MVC模式允许视图直接访问模型,适用于小型项目但耦合度高;MVP通过presenter中介实现视图与模型解耦,适合复杂界面但可能臃肿;MVVM采用双向数据绑定,广泛应用于Vue.js等现代框架。文章详细阐述了各模式的组成、特点、优缺点及适用场景,并提供了对比表格和框架对应关系,帮助开发者根据项目需求选择合适的架构方案。

警警的博客 1087

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

MVC、MVP、MVVM架构模式深度解析教程

MVC、MVP、MVVM是三种主流的软件架构模式,它们都通过​​分离关注点​​来改善代码的组织方式,使项目更易于开发、测试和维护。这三种模式之间存在清晰的演进关系,核心驱动力是不断降低View和Model之间的耦合度,提升开发效率和可测试性。MVC、MVP、MVVM之间存在清晰的演进关系:​​从MVC到MVP​​:解耦的开始。MVC的主要问题在于View和Model可能存在耦合(View直接监听Model变化),这不利于测试和维护。

Rysxt_的博客 1038

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Android三种框架的比较——教你认清MVC,MVP和MVVM

相信大家对MVC,MVP和MVVM都不陌生,作为三个最耳熟能详的Android框架,它们的应用可以是非常广泛的,但是对于一些新手来说,可能对于区分它们三个都有困难,更别说在实际的项目中应用了,有些时候想用MVP的,代码写着写着就变成了MVC,久而久之就对它们三个的选择产生了恐惧感,如果你也是这样的人群,那么这篇文章可能会对你有很大的帮助,希望大家看完都会有收获吧!文章重点:(1)了解并区分MVC,...

qq_42442129的博客 4191

Android常用的几种框架MVC MVP MVVM

MVC全名是Model View Controller   MVC,Model View Controller,是软件架构中最常见的一种框架,简单来说就是通过controller的控制去操作model层的数据,并且返回给view层展示   layout.xml里面的xml文件就对应于MVC的view层,里面都是一些view的布局代码,而各种java bean,还有一些类似repositor...

72的博客 420

Android开发框架模式(MVC、MVP、MVVM)实例解析

Android项目中,尤其是比较大型的项目开发中,模块内部的高聚合和模块间的低耦合性就显得尤为重要了。所以我们一般情况下需要为项目设计一种框架模式,通常情况下我们一般用到的三种MVC、MVP、MVVM。 通过框架模式设计的项目能够极大的提高开发效率,提高项目的可维护性和可扩展性,另外在模块测试及问题定位上也提供了较大的便利。 接下来我们就对这三种框架模式一一进行讲解,并会重点讲解下比较常用的MV......

红日 1万+

MVC-MVP-MVVM

MVC并不适用大型应用 由于MVC的交互过程注定了它的C层会越来越臃肿 中小型项目可以满足需求 如果大型项目使用MVC 我们的维护成本 以及代码的管理 扩展 都会比较麻烦由此我们引入了MVP的使用MVP的交互方式 就是通过接口 将V层的数据更新传递给P层 我们的V层可以对P层进行限制 暴露那些行为 那些方法都是由自己决定的 M层还是负责数据变动以及逻辑 缺点就是当项目过大时 我们的接口会越来越多 导致我们的需求变动时 接口更新和重构会比较麻烦。

2302_76466751的博客 650

Android MVP和MVC和MVVM模式区别

(1)MVP模式  比较常用的模式 1. (数据模型)Model:业务逻辑和实体模型,用来操作实际的数据,包含Bean和Model的抽象接口来降低耦合。 2. (视图)View:就是Android中的视图,需要建立一个View的抽象接口View Interface。通过实现View的接口来实现View与Presenter的交互,从而降低耦合。对应于Activity,负责View的绘制与用户交互...

7758258博客 2828

mvc和mvp和mvvm的区别

MVC,MVP,MVVM设计架构的区别,相信大家对这几个概念都有所了解。 首先,明确一点,架构的目的就是为了提高开发效率,降低维护成本。 利用面向对象的设计原则,对每个模块的职责进行合理的划分,为了让其他人更好的理解架构设计思想,然后给予每个模块一个通用的名词解释,为了更好的说清楚数据绑定,这里就简单解释一下目前常见的几种架构(以Android为例)。 MVC: 模型层(Model),负责处理数据逻辑,一般包含数据库、本地数据、网络获取的Bean等组成。 视图层(View),负责处理视图显示,..

紫微星的博客 902
上一篇: Android优化之启动优化和黑白屏优化
下一篇: android.content.res.Resources$NotFoundException: String resource ID #0x1解决方案
浮空over
博客等级 码龄7年 6粉丝 33原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值