简单介绍一下mvvm mvc mvp以及区别、历史

MVC(Model - View - Controller)

在这里插入图片描述
因MVC架构的灵活性,架构图形式很多,仅供参考

历史:

  • MVC 是最早出现的软件架构模式之一,其历史可以追溯到 20 世纪 70 年代,最初被用于 Smalltalk - 80 环境。它的出现是为了应对软件开发中用户界面与业务逻辑紧密耦合的问题,旨在分离数据处理、用户界面展示和交互逻辑。

架构介绍:

  • Model(模型): 负责数据存储和业务逻辑,如数据库操作、数据验证、计算等。它是应用程序的核心数据结构和处理单元。
  • View(视图): 主要负责将 Model 中的数据展示给用户,以可视化形式呈现信息。例如,通过 HTML、CSS 构建的网页界面。View 通常会监听用户操作并通知 Controller,但本身不处理业务逻辑。
  • Controller(控制器): 作为 View 和 Model 之间的桥梁,接收 View 传递的用户操作(如点击按钮),然后调用 Model 中的相关方法进行数据处理,并根据处理结果更新 View。

MVP(Model - View - Presenter)

在这里插入图片描述

历史:

  • MVP 是在 MVC 的基础上发展而来的,主要是为了进一步分离视图和模型,解决 MVC 在某些情况下视图对模型依赖过重的问题,在 20 世纪 90 年代开始受到关注并逐渐应用。

架构介绍:

  • Model(模型): 和 MVC 中的模型类似,处理数据存储和业务逻辑,如数据的获取、存储和复杂的计算规则。
  • View(视图): 负责显示数据,比 MVC 中的视图更 “薄”,几乎不包含业务逻辑,只专注于展示 Presenter 传递过来的信息。它将用户操作反馈给 Presenter。
  • Presenter(展示器): Presenter 是 MVP 的核心,它接收来自 View 的用户输入,调用 Model 中的业务逻辑进行处理,然后将处理后的结果反馈给 View,以更新界面显示。它在 Model 和 View 之间起到了更主动的协调作用。

MVVM(Model - View - ViewModel)

在这里插入图片描述

历史:

  • MVVM 是随着微软的 WPF(Windows Presentation Foundation)和 Silverlight 技术发展起来的,它的出现是为了更好地利用数据绑定技术,简化用户界面开发,大概在 21 世纪初开始流行。

架构介绍:

  • Model(模型): 负责处理业务数据和逻辑,如数据的持久化、检索以及与业务相关的计算。
  • View(视图): 呈现用户界面,通过数据绑定与 ViewModel 关联。它不包含复杂的业务逻辑,只负责显示数据和接收用户交互事件,并将事件传递给 ViewModel。
  • ViewModel(视图模型): 作为连接 Model 和 View 的桥梁,从 Model 获取数据并进行转换,使其适合在 View 中显示。同时,它接收 View 传来的用户交互信息,并将其转化为对 Model 的操作。MVVM 的核心特点是双向数据绑定,即 View 和 ViewModel 的数据变化会自动相互更新。

三者区别

数据流向和绑定方式:

  • MVC: View 和 Model 之间的数据流向相对简单,View 从 Model 获取数据显示,用户操作通过 Controller 间接影响 Model。数据绑定通常是单向的(从 Model 到 View),需要手动更新 View。
  • MVP: Presenter 在数据交互中起关键作用,View 和 Model 通过 Presenter 进行数据交换,实现部分双向数据绑定。Presenter 从 Model 获取数据并处理后传递给 View,同时将 View 的用户输入反馈给 Model。
  • MVVM: 具有双向数据绑定机制,ViewModel 和 View 之间的数据变化自动同步,不需要手动干预。ViewModel 与 Model 之间则是单向的数据获取和操作关系。

各层职责和耦合度:

  • MVC: 在简单场景下容易理解和实现,但随着项目复杂度增加,Controller 可能会变得臃肿,View 和 Model 之间可能存在一定的间接耦合。
  • MVP: View 和 Model 的分离更加彻底,View 变得更加轻量,但 Presenter 可能会因为要处理大量的视图和模型交互逻辑而变得复杂,且代码的可测试性依赖于良好的接口设计。
  • MVVM: 由于双向数据绑定,开发效率较高,View 和 ViewModel 的耦合相对紧密,但只要设计合理,ViewModel 和 Model 的分离还是比较清晰的,同时也方便进行单元测试。

适用场景:

  • MVC: 适用于小型项目或者对交互逻辑要求不高的应用,能够快速实现功能。在 Web 开发早期应用广泛。
  • MVP: 在需要更好地分离视图和模型,特别是有复杂交互逻辑且对视图可测试性有要求的项目中表现出色,如一些企业级应用。
  • MVVM: 非常适合数据驱动的应用,特别是在开发具有丰富交互的用户界面且需要频繁更新数据的场景,如现代的前端单页应用(SPA)和移动应用开发。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/911306.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

黑马程序员linux学习【持续更新】

Linux基础 一、Linux简介 1.分类 不同领域的主流操作系统,主要分为下 几类:桌面操作系统、服务器操作系统、移动设备操作系统、嵌入式操作系统。 桌面操作系统 操作系统特点Windows用户数量最多MacOS操作体验好,办公人士首选Linux用户数…

Vert.x,应用监控 - 全链路跟踪,基于Zipkin

关于Zipkin Zipkin是一款开源的分布式实时数据追踪系统(Distributed Tracking System),能够收集服务间调用的时序数据,提供调用链路的追踪。Zipkin每一个调用链路通过一个trace id来串联起来,通过trace id,就能够直接定位到这次调…

ENSP作业——园区网

题目 根据上图,可得需求为: 1.配置交换机上的VLAN及IP地址。 2.设置SW1为VLAN 2/3的主根桥,设置SW2为VLAN 20/30的主根桥,且两台交换机互为主备。 3.可以使用super vlan。 4.上层通过静态路由协议完成数据通信过程。 5.AR1作为企…

从壹开始解读Yolov11【源码研读系列】——Data.dataset.py:模型训练数据预处理/YOLO官方数据集类——YOLODataset

【前情回顾】在上一篇文章记录了YOLO源码data目录下的 base.py 文件,其中定义了一个可灵活修改的数据加载处理基类——Class BaseDataset 灵活基类博文地址:https://blog.csdn.net/qq_58718853/article/details/143249295 【实验代码】所有实验代码上传至…

HFSS 3D Layout中Design setting各个选项的解释

从HFSS 3D LAYOUT菜单中,选择Design Settings打开窗口,会有六个选项:DC Extrapolation, Nexxim Options, Export S Parameters, Lossy Dielectrics, HFSS Meshing Method, and HFSS Adaptive Mesh. DC Extrapolation 直流外推 直流外推分为标…

【板栗糖GIS】——如果安装的vscode版本落后了,如何无障碍更新

【板栗糖GIS】——如果安装的vscode版本落后了,如何无障碍更新 今天想安装新扩展插件时发现vscode版本有点旧,于是在不影响插件的情况下更新。 打开vscode软件,点击设置检查更新,如果有需要更新的直接安装到原目录,如…

数字化转型必看!华为数字化最全合集(192页PDF限免下载 )

今天给大家整理了6份关于华为数字化的资料,共计192页,干货满满! 资料已经全部打包,划到文末添加大师兄即可免费下载👇👇👇 一、华为实施数字化转型方法论与实践的业务解读 这份报告是华为实施数…

【数据集】【YOLO】【目标检测】道路结冰数据集 1527 张,YOLO目标检测实战训练教程!

数据集介绍 【数据集】道路结冰数据集 1527 张,目标检测,包含YOLO/VOC格式标注。数据集中包含2种分类:“clear_road, ice_road”。数据集来自国内外图片网站和视频截图,部分数据经过数据增强处理。检测范围监控视角检测、无人机视…

创建线程时传递参数给线程

在C中,可以使用 std::thread 来创建和管理线程,同时可以通过几种方式将参数传递给线程函数。这些方法包括使用值传递、引用传递和指针传递。下面将对这些方法进行详细讲解并给出相应的代码示例。 1. 值传递参数 当你创建线程并希望传递参数时&#xff…

集智书童 | DuoDiff: 提升浅层 Transformer 性能的扩散模型, 双 Backbone 件扩散模型在图像处理中的应用 !

本文来源公众号“集智书童”,仅用于学术分享,侵权删,干货满满。 原文链接:DuoDiff: 提升浅层 Transformer 性能的扩散模型, 双 Backbone 件扩散模型在图像处理中的应用 ! 扩散模型在图像生成方面取得了前所…

linux perf 环境部署和基本测试(基于Ubuntu20.04)

1,linux 安装perf sudo apt-ge install linux-tools-common sudo apt-get install linux-tools-$(uname -r) linux-tools-generic -y 2 补充安装 sudo apt-get install python3-q-text-as-data 3,perf常用命令 larkubuntu:~$ perf usage: perf [--version] [--hel…

PHP露营地管理平台小程序系统源码

⛺️【露营新风尚】露营地管理平台系统全攻略⛺️ 🏕️一、露营热潮下的管理难题:如何高效运营露营地?🤔 随着露营文化的兴起,越来越多的人选择在大自然中享受宁静与自由。然而,露营地的管理却面临着诸多…

信息安全工程师(83)Windows操作系统安全分析与防护

一、Windows操作系统安全分析 系统漏洞: Windows操作系统由于其复杂性和广泛使用,可能存在一些已知或未知的漏洞。这些漏洞可能会被黑客利用,进行恶意攻击。微软会定期发布系统更新和补丁,以修复这些漏洞,提高系统的安…

软件测试—功能测试详解

🍅 点击文末小卡片 ,免费获取软件测试全套资料,资料在手,涨薪更快 一、测试项目启动与研读需求文档 (一) 组建测试团队 1、测试团队中的角色 2、测试团队的基本责任 尽早地发现软件程序、系统或产…

【1个月速成Java】基于Android平台开发个人记账app学习日记——第7天,申请阿里云SMS短信服务SDK

系列专栏链接如下,方便跟进: https://blog.csdn.net/weixin_62588253/category_12821860.html?fromshareblogcolumn&sharetypeblogcolumn&sharerId12821860&sharereferPC&sharesourceweixin_62588253&sharefromfrom_link 同时篇幅…

安装和运行开发微信小程序

下载HBuilder uniapp官网 uni-app官网 微信开发者工具 安装 微信小程序 微信小程序 官网 微信小程序 配置 运行 注意:运行前需要开启服务端口 如果运行看不到效果,设置下基础库选别的版本 配置

如何用pycharm连接sagemath?

#世纪难题在我逃避刷CTF的这两天解决了# 1. 在本地linux上部署最新版的sagemath 推荐WSLdocker直接pull sagemath 2. pycharm中创建jupyter脚本,远程连接jupyter服务器 3. 运行cell并配置kernel 缺点:pycharm用自带的python编译器预处理代码&#xff0…

JNPF V5.1版本震撼上线,更多功能等你解锁!

亲爱的用户们: 随着季节的更迭,引迈也在不断进步和创新。经过数月的精心打磨和无数次的测试,我们非常兴奋地宣布,JNPF快速开发平台迎来了激动人心的V5.1版本更新!这次更新不仅带来了全新的功能和改进,还进…

Dependency: androidx.webkit:webkit:1.11.0-alpha02. 问题

android studio 打包后出现这个问题 1.步骤更新topOn sdk 添加 //Admob api “com.anythink.sdk:adapter-admob:6.4.18” api “com.google.android.gms:play-services-ads:23.4.0” api "com.google.android.gms:play-services-ads:23.4.0"sdk 中会出现打包编译报错…

express 使用JWT认证

1、JWT的理解 JWT 的组成部分: 分别是 Header(头部)、Payload(有效荷载)、Signature(签名) 三者之间使用英文的"."分隔, Pyload 部分才是真正的用户信息,他是用户信息经过加密之后生成的字符串 Header 和 Signature 是 安全性相关的部分,只是为了保证 Tok…