当前位置: 首页 > news >正文

MVC、MVP和MVVM之间的区别

MVC(Model-View-Controller)隔开业务和UI(一对一)

  1. 角色划分:
    Model:负责处理数据和业务逻辑,通常包括数据的存储、检索和更新等操作。
    View:负责展示用户界面,接收用户输入,并将用户操作传递给 Controller。
    Controller:作为 Model 和 View 之间的中介,负责处理用户输入,调用 Model 进行数据处理,并更新 View 以反映数据的变化。
  2. 交互方式:
    View 和 Model 之间存在直接的依赖关系。View 可以直接访问 Model 中的数据,并且在数据发生变化时,View 需要主动从 Model 中获取新的数据进行更新。
    Controller 负责协调 View 和 Model 之间的交互。当用户在 View 上进行操作时,View 将事件传递给 Controller,Controller 再根据事件类型调用 Model 进行相应的业务处理,并更新 View。
  3. 优缺点:
    优点:
    结构简单,易于理解和实现。
    可以将业务逻辑和用户界面分离,提高代码的可维护性。
    缺点:
    View 和 Model 之间的紧密耦合可能导致代码难以维护和测试。例如,当 Model 中的数据发生变化时,View 需要主动获取数据并更新自己,这增加了代码的复杂性。
    Controller 可能会变得过于庞大和复杂,因为它需要处理所有的用户输入和业务逻辑。
    在这里插入图片描述
  • 主动式
    在这里插入图片描述
  • 被动式
    在这里插入图片描述

MVP(Model-View-Presenter)

  1. 角色划分:
    Model:与 MVC 中的 Model 类似,负责处理数据和业务逻辑。
    View:只负责显示数据和接收用户输入,不包含任何业务逻辑。View 通常通过接口与 Presenter 进行交互。
    定义接口,如UserListView,包含显示用户列表、显示加载进度、显示错误信息等方法。
    Presenter:作为 View 和 Model 之间的中介,负责处理用户输入,调用 Model 进行数据处理,并更新 View。Presenter 通常包含大部分的业务逻辑。
    实现UserListView接口中的方法,负责处理用户输入,调用 Model 进行数据处理,然后更新 View。
  2. 交互方式:
    View 和 Model 之间完全解耦,通过 Presenter 进行间接交互。View 只需要将用户操作传递给 Presenter,Presenter 负责调用 Model 进行数据处理,并将结果返回给 View 进行显示。
    Presenter 与 View 和 Model 都有联系。Presenter 接收来自 View 的用户输入,调用 Model 进行业务处理,并将结果更新到 View。同时,Presenter 也可以从 Model 中获取数据,并将其传递给 View 进行显示。
  3. 优缺点:
    优点:
    更好地实现了 View 和 Model 的解耦,使得代码更易于维护和测试。
    Presenter 可以进行单元测试,而不需要依赖于 Android 框架,提高了测试的效率和可靠性。
    缺点:
    代码量相对较大,因为需要定义接口来实现 View 和 Presenter 之间的交互。
    Presenter 可能会变得复杂,特别是当业务逻辑较多时。
    在这里插入图片描述

MVVM(Model-View-ViewModel)

  1. 角色划分:
    Model:与 MVC 和 MVP 中的 Model 类似,负责处理数据和业务逻辑。
    View:负责显示数据和接收用户输入,不包含任何业务逻辑。View 通过数据绑定与 ViewModel 进行交互。
    ViewModel:作为 View 和 Model 之间的桥梁,负责处理业务逻辑,并将数据以可观察的方式提供给 View。ViewModel 通常包含大部分的业务逻辑和数据处理代码。
  2. 交互方式:
    View 和 Model 之间通过 ViewModel 进行间接交互。View 通过数据绑定机制自动更新显示的数据,而不需要手动从 ViewModel 中获取数据。当用户在 View 上进行操作时,View 将事件传递给 ViewModel,ViewModel 进行相应的业务处理,并更新数据,从而自动更新 View。
    ViewModel 与 Model 进行交互,获取数据并进行处理,然后将处理后的数据以可观察的方式提供给 View。View 只需要关注数据的变化,而不需要关心数据的来源和处理过程。
  3. 优缺点:
    优点:
    实现了更好的 View 和 Model 的解耦,代码结构更加清晰,易于维护和测试。
    数据绑定机制使得 View 的更新更加自动和高效,减少了手动更新 View 的代码量。
    ViewModel 可以进行单元测试,而不需要依赖于 Android 框架。
    缺点:
    学习成本相对较高,需要掌握数据绑定等新的技术和概念。
    对于复杂的界面和业务逻辑,ViewModel 可能会变得复杂,需要合理地组织代码。
    在这里插入图片描述

在这里插入图片描述

相关文章:

MVC、MVP和MVVM之间的区别

MVC(Model-View-Controller)隔开业务和UI(一对一) 角色划分: Model:负责处理数据和业务逻辑,通常包括数据的存储、检索和更新等操作。 View:负责展示用户界面,接收用户输…...

uni-app 打包成app时 限制web-view大小

今天对接一个uni-app的app 内置对方h5 web-view的形式 需要对方在web-view顶部加点东西 对方打的app的web-view始终是全屏的状态,对方表示做不到我要的效果 emmmmmm。。。。。。 于是乎 自己搭了个demo 本地h5跑起来审查了下代码,发现web-view是给绝对定位了 于是乎 我想外层…...

智能指针(2)

目录 答题格式: 几个易错点 可能问法四: 问题分析: 问题解答: 上回文说到,weak_ptr的功能和区别,并且进行了分析,我们接着进行解答。 答题格式: int main() { std::we…...

[含文档+PPT+源码等]精品基于Nodejs实现的家教服务小程序的设计与实现

基于Node.js实现的家教服务小程序的设计与实现背景,主要源于以下几个方面: 一、家教市场的现状与需求 随着教育竞争的日益激烈,家庭对子女教育质量的重视程度不断提升,家教服务已成为许多家庭不可或缺的一部分。然而&#xff0c…...

electron打包报错-winCodeSign无法下载

electron打包报错-winCodeSign下载问题 问题描述 downloaded urlhttps://registry.npmmirror.com/-/binary/electron-builder-binaries/winCodeSign-2.6.0/winCodeSign-2.6.0.7z duration1.577s⨯ cannot execute causeexit status 2outerrorOutERROR: Cannot create s…...

给Windows系统设置代理的操作方法

一、什么是代理 网络代理是一种特殊的网络服务,允许一个网络终端通过这个服务与另一个网络终端进行非直接的连接,而提供代理服务的电脑系统或其它类型的网络终端被称为代理服务器。 代理服务器是网络信息的中转站,代理服务器就像是一个很大的…...

高质量带货短视频素材来源推荐

在抖音带货时,寻找高质量视频素材至关重要。今天,我为大家分享五个可以下载高清无水印带货短视频素材的网站,帮助你轻松获取灵感和素材! 蛙学网 蛙学网作为国内领先的短视频素材平台,提供多种类的带货短视频素材。无论…...

torchvision.transforms.Resize()的用法

今天我在使用torchvision.transforms.Resize()的时候发现,一般Resize中放的是size或者是(size,size)这样的二元数。 这两个里面,torchvision.transforms.Resize((size,size)),大家都很清楚,会将图像的h和w大小都变成size。 但是…...

简单认识 redis -数据类型命令

一.Redis 键(key) 不能存在相同名称的key //SET KEY_NAME value 设置一个键 127.0.0.1:6379> set runoobkey redis OK 127.0.0.1:6379> get runoobkey redis "redis" //DEL KEY_NAME 删除键 127.0.0.1:6379> DEL redis (integer) 0 127.0.0.1:6379>…...

Python 语言学习——应用1.2 数字图像处理(第二节,变换)

目录 1.基础知识 1.图像几何变换概念 2.图像几何变换方式 3.插值运算 4.几何变换步骤 2.各类变换 1.位置变换 2.形状变换 3.代数运算 3.实战演练 1.基础知识 1.图像几何变换概念 在图像处理过程中,为了观测需要,常常需要对 图像进行几何变换&am…...

【QT Quick】页面布局:手动定位与坐标系转换

在这篇教程中,我们将详细介绍在 QT Quick 中如何手动定位元素以及坐标系转换的概念和应用。手动定位不仅仅是指定 x、y 坐标,更涉及坐标系的管理。我们会从最基本的手动定位开始,逐步扩展到更复杂的坐标系转换操作。 坐标系 默认坐标系&…...

uniapp自定义导航,全端兼容

我们在用uniapp 开发应用的时候,有的页面需要自定义导航, 1.如果普通的直接使用uni 扩展柜组件的 uni-nav-bar 也基本够用, 2.如果稍微带点自定义的这个值无法支持的,特别在小程序端,胶囊是会压住右边的按钮的 自定…...

[论文阅读] DVQA: Understanding Data Visualizations via Question Answering

原文链接:http://arxiv.org/abs/1801.08163 启发:没太读懂这篇论文,暂时能理解的就是本文提出了一个专门针对条形图问答的数据集DVQA以及一个端到端模型SANDY,模型有两个版本,Oracle和OCR。主要解决的问题是固定词表无…...

【PostgreSQL】实战篇——数据备份和恢复的最佳实践和工具

数据备份和恢复是确保数据安全性和可用性的关键环节。无论是由于硬件故障、软件错误、数据损坏还是人为错误,能够快速恢复数据都是保护业务连续性的重要措施。 PostgreSQL 提供了多种备份和恢复工具和方法,其中最常用的包括 pg_dump、pg_restore 和点时…...

代码随想录算法训练营第二十九天|93.复原IP地址 78.子集 90.子集II

93.复原IP地址 给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式。 有效的 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用 . 分隔。 例如:"…...

【mysql】使用AbstractRoutingDataSource实现多数据源 与 获取mapper上注解

使用AbstractRoutingDataSource实现多数据源 与 获取mapper上注解 背景 随着业务发展速度越来越快,数据的增长也呈现倍数级别增长,数据库的压力,对于查询和写入等所有操作,都依赖于主库,其实有一些对于时效性要求不高…...

希沃冰点还原

要取消希沃冰点还原,可以按照以下步骤进行: 打开希沃冰点还原的应用或程序。 在应用或程序的界面上,寻找设置选项或菜单。 点击或选择设置选项或菜单,进入设置界面。 在设置界面上,查找“取消”或“停止”等相关选项…...

Hadoop服务端口号、Spark端口号、Hive端口号以及启动命令

文章目录 1. 服务端口号1.1 Hadoop相关的服务端口号1.2 Spark相关的服务端口号1.3 Hive的连接端口 2. 服务启动指令 1. 服务端口号 1.1 Hadoop相关的服务端口号 HDFS的web页面访问端口 9870HDFS 的程序访问端口 8020Yarn的访问端口 8088历史日志访问端口 19888 1.2 Spark相关…...

【C++】--类和对象(3)

🤑个人主页: 起名字真南 🤑个人专栏:【数据结构初阶】 【C语言】 【C】 目录 1 深入构造函数2 类型转换3 static成员4 友元函数5 内部类6 匿名对象 1 深入构造函数 之前我们实现构造函数的时候,初始化成员变量都是在函数体内赋值&#xff0c…...

国外电商系统开发-运维系统文件上传-高级上传

如果您要上传文件到10台服务器中,有3台服务器的路径不是一样的,那么在这种情况下您就可以使用本功能,单独执行不一样的路径 点击【高级】上传...

C语言变量与运算符详解:从内存管理到高效编程实践

1. 从零到一:为什么C语言是程序员的“内功心法”?如果你刚看完系列的第一篇,对C语言有了一个模糊的印象,觉得它古老、复杂,甚至有点“过时”,那太正常了。我刚开始接触编程时,也这么想。为什么放…...

【JPCS出版、EI检索稳定】2026年航空航天工程与空天信息国际学术会议(ICAEAI 2026)

2026年航空航天工程与空天信息国际学术会议(ICAEAI 2026)将于2026年6月26-28日在哈尔滨召开。会议旨在为从事航空航天工程与空天信息领域研究的专家学者、工程技术人员、技术研发人员提供一个共享科研成果和前沿技术,加强学术研究和探讨&…...

告别网络玄学:手把手教你用寄存器调试法搞定YT8521 PHY‘ping不通’故障

寄存器调试实战:用YT8521 PHY案例解析RGMII时序优化 当一块嵌入式开发板的网络接口出现"能发不能收"的诡异现象时,多数工程师的第一反应往往是检查驱动配置或网线连接。但在实际项目中,这种看似简单的"ping不通"问题&…...

全志T113-i音视频编解码测试:从环境搭建到问题排查全流程

1. 项目概述与核心价值最近在调试一块基于全志T113-i芯片的开发板,核心任务是对其音视频编解码能力进行全面的功能与性能验证。这听起来像是一个标准的硬件测试流程,但如果你真的上手做过,就会知道从拿到一块“裸板”到能稳定播放1080P视频、…...

UE5新手避坑指南:从导入FBX模型到材质贴图,搞定你的第一个Submarine Actor

UE5新手避坑实战:从模型导入到材质优化的全流程解决方案 当第一次打开虚幻引擎5的编辑器界面时,大多数初学者都会被其强大的功能和复杂的界面所震撼。作为次世代游戏开发的核心工具,UE5带来了Nanite虚拟几何体、Lumen全局光照等革命性技术&a…...

实测Llama3 8B在国产AI盒子上的推理速度:算丰SG2300x Airbox跑出9.6 token/s

实测Llama3 8B在国产AI盒子上的推理速度:算丰SG2300x Airbox跑出9.6 token/s 当Meta开源Llama3大模型的消息席卷AI社区时,一个更实际的问题浮出水面:如何让这个性能怪兽在边缘设备上真正跑起来?我们拿到搭载算丰SG2300x芯片的Radx…...

fastAPI的依赖注入 与 .net Core的依赖注入区别

...

2026年腾讯云OpenClaw/Hermes Agent配置Token Plan集成步骤解析

2026年腾讯云OpenClaw/Hermes Agent配置Token Plan集成步骤解析。OpenClaw是开源的个人AI助手,Hermes Agent则是一个能自我进化的AI智能体框架。阿里云提供计算巢、轻量服务器及无影云电脑三种部署OpenClaw 与 Hermes Agent的方案、百炼Token Plan兼容主流 AI 工具&…...

taotoken用量看板如何帮助开发者清晰掌握各模型消耗详情

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 taotoken用量看板如何帮助开发者清晰掌握各模型消耗详情 对于使用多个大模型进行开发的团队或个人而言,成本管理是一个…...

如何永久保存微信聊天记录:WeChatMsg开源工具的完整解决方案

如何永久保存微信聊天记录:WeChatMsg开源工具的完整解决方案 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/we…...