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

embedded/2024/11/13 0:02:02/

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)和移动应用开发。

http://www.ppmy.cn/embedded/136139.html

相关文章

使用Python和Vosk库实现语音识别

使用Python和Vosk库实现语音识别 在人工智能和机器学习领域,语音识别技术正变得越来越重要。Python作为一种强大的编程语言,拥有丰富的库和框架,可以方便地实现语音识别功能。今天,我们将介绍如何使用Python中的SpeechRecognitio…

RabbitMQ 存储机制

一、消息存储机制 不管是持久化的消息还是非持久化的消息都可以被写入到磁盘。持久化的消息在到达队列时就被写入到磁盘,非持久化的消息一般只保存在内存中,在内存吃紧的时候会被换入到磁盘中,以节省内存空间。这两种类型的消息的落盘处理都…

批量归一化 BN(Batch Normalization) (减少重复学习 - 加速损失收敛) + 代码实现 ——笔记2.15《动手学深度学习》

目录 0. 前言 1. 训练深层网络 1.1 批量归一化的表达式 1.2 训练模式&预测模式 2. 批量规范化层 2.1 全连接层 2.2 卷积层 2.2.1 预测模式中的BN 3. 从零实现 (pytorch) 3.1 使用BN层的 LeNet 4. 简明实现 (调包) 5. 争议(可解释性问题)…

【笔记】前后端互通中前端登录无响应

后来的前情提要 : 后端的ip地址在本地测试阶段应该设置为localhost 前端中写cors的配置 后端也要写cors的配置 且两者的url都要为localhost 前端写的baseUrl是指定对应的后端的ip地址以及端口号 很重要 在本地时后端的IP的地址也必须为本地的 F12的网页报错是&a…

HTB:GreenHorn[WriteUP]

目录 连接至HTB服务器并启动靶机 使用nmap对靶机TCP端口进行开放扫描 再次使用nmap对这三个端口进行脚本、服务扫描 尝试先通过curl访问靶机80端口 将靶机IP与该域名写入hosts使DNS本地解析 使用浏览器访问greenhorn.htb 使用Wappalyzer插件查看该页面技术栈 尝试在sea…

【数据结构】快慢指针探秘:理解链表与数组中的环结构

在处理链表或数组时,我们经常需要在一次遍历中找到特定的位置或检测某种模式。这时,快慢指针技术就能成为强大的工具,尤其在链表面试题中。本文将详细介绍什么是快慢指针、它们的工作原理,并通过一些实际应用帮助你理解这种技巧。…

详细分析Js中保留前几位小数的基本知识(附Demo)

目录 前言1. 基本知识2. Demo3. 取整 拓展 前言 从实战中学习,由于需要计算充电以及结束充电的时长,并且保留两位小数: onLoad(page, params {}) {// 查询要带页面信息,当前页还有数据listViewDeviceChargeHistory(page.curren…

华为ENSP--ISIS路由协议

项目背景 为了确保资源共享、办公自动化和节省人力成本,公司E申请两条专线将深圳总部和广州、北京两家分公司网络连接起来。公司原来运行OSFP路由协议,现打算迁移到IS-IS路由协议,张同学正在该公司实习,为了提高实际工作的准确性和…