MVVM架构模式

目录

      • 一、MVVM简介
      • 二、MVVM结构
      • 三、MVC
      • 四、MVP
      • 五、MVVM的优势与存在的问题

一、MVVM简介

MVVM是Model-View-ViewModel的简写。即是模型-视图-视图模型。
MVVM架构模式是一种软件设计模式,它将应用程序分为三个部分:模型(Model)、视图(View)和视图模型(ViewModel)。该模式的目的是将用户界面(UI)逻辑与业务逻辑分离,以便开发人员可以更轻松地管理和修改应用程序。

在MVVM模式中,模型表示应用程序中的数据和业务逻辑,视图表示用户界面,视图模型则是连接模型和视图的桥梁。视图模型从模型获取数据并将其转换为视图可以理解的形式,然后将其传递给视图。视图模型还接收来自视图的用户输入,并将其传递给模型进行处理。视图模型可以实现命令、验证、异常处理等功能,以便在应用程序中实现更加完整和健壮的业务逻辑。

MVVM模式的优点包括:提高代码的可维护性、可测试性和可重用性;隔离复杂的UI逻辑;改善团队合作(开发人员可以专注于他们的领域)等。

二、MVVM结构

在这里插入图片描述

  • model模型

    • 指的是后端传过来的数据。
  • view视图

    • 指的是所有看到的页面,可以理解为将数据以某种方式呈现给用户。
  • ViewModel

    • 指的是视图模型,他是连接view和model的桥梁。

从上面的图片可以大致看到,有两个不同的方向。

  1. 模型->视图
    解析:将后端数据转换为前端的页面。实现的方式是数据绑定。

  2. 视图->模型
    解析:将前端页面转换为后端数据的实现方式:叫做Dom数据监听。
    存在两个方向都能实现的情况下,叫做数据的双向绑定。

三、MVC

MVVM是Model-View-ViewModel的简写。本质上就是MVC的改进版。
MVCModel View Controller的简写, 即模型-视图-控制器。M和V指的意思和MVVM中的M和V意思一样。C即Controller指的是页面业务逻辑。使用MVC的目的就是将M和V的代码分离,从而使同一个程序可以使用不同的表现形式。
在这里插入图片描述

  1. View 传送指令到 Controller
  2. Controller 完成业务逻辑后,要求 Model 改变状态
  3. Model 将新的数据发送到 View,用户得到反馈
    可以看到其所有的通信都是单向的。view和model是直接进行通信的。view和model之间随着业务量的不断庞大,会出现和蜘蛛网一样难以处理的关系,随着前端应用的复杂程度越来越复杂。所以必须要改进。
    原文链接

四、MVP

MVP是 Model View Presenter 的简写。它与MVC的不同是改变了通信方向
MVVM是MVC的改进版,立足于MVP并进一步的改进

在这里插入图片描述

  1. 各部分之间的通信,都是双向的。
  2. View 与 Model 不发生联系,都通过 Presenter 传递。
  3. View 非常薄,不部署任何业务逻辑,称为"被动视图"(Passive View),即没有任何主动性,而 Presenter非常厚,所有逻辑都部署在那里。

五、MVVM的优势与存在的问题

  • 优点
    • 低耦合。视图(View)可以独立于Model变化和修改,一个ViewModel可以绑定到不同的"View"上,当View变化的时候Model可以不变,当Model变化的时候View也可以不变。
    • 可重用性。你可以把一些视图逻辑放在一个ViewModel里面,让很多view重用这段视图逻辑。
    • 独立开发。开发人员可以专注于业务逻辑和数据的开发(ViewModel),设计人员可以专注于页面设计。
    • 可测试。界面素来是比较难于测试的,测试可以针对ViewModel来写。
  • 缺点
    • 有人认为对于简单的UI,MVVM可能过于庞大。
    • 在View和ViewModel之间没有提供紧密的耦合
    • 当具有复杂的数据绑定时,调试过程将很复杂。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【附安装包】CAD2024(建筑版)安装教程

软件下载 软件:CAD建筑版本:2023语言:简体中文大小:4.52G安装环境:Win11/Win10硬件要求:CPU2.5GHz 内存8G(或更高)下载通道①百度网盘丨64位下载链接:https://pan.baidu.com/s/1cHe…

大数据治理运营整体解决方案[39页PPT]

导读:原文《大数据治理运营整体解决方案[39页PPT]》(获取来源见文尾),本文精选其中精华及架构部分,逻辑清晰、内容完整,为快速形成售前方案提供参考。 数据治理总体方案 数据治理平台解决方案 数据治理运…

【推荐】Spring与Mybatis集成整合

目录 1.概述 2.集成 2.1代码演示: 3.整合 3.1概述 3.2 进行整合分页 接着上两篇,我已经写了Mybatis动态之灵活使用,mybatis的分页和特殊字符的使用方式接下来把它们集成起来,是如何的呢👇👇&#x1…

python 单向循环(环形)链表

不带头结点的单向循环链表的示意图 循环链表的应用场景【约瑟夫问题】 现假设 n 5(一共有 5 个人),k 1(从第 1 个人开始报数), m 2(数 2 下),则出队编号的序列为&…

《存储IO路径》专题:IO虚拟化初探

大家好,欢迎来到今天的科技小课堂。今天我们要聊聊的是一项非常有趣且实用的技术——I/O虚拟化(Input/Output Virtualization,简称IOV)。想象一下,如果把物理硬件资源比作一道丰盛的大餐,那么IOV就是那位神…

【C++初阶】stack的常见操作和模拟实现

👦个人主页:Weraphael ✍🏻作者简介:目前学习C和算法 ✈️专栏:C航路 🐋 希望大家多多支持,咱一起进步!😁 如果文章对你有帮助的话 欢迎 评论💬 点赞&#x1…

服务器基础

0x01基础 介绍 可以理解为企业级的电脑,比个人使用的电脑具备更强的配置、性能、可靠性及稳定性。设计工艺和器件全部采用企业级设计,保障7*24小时稳定运行。 演进历史 处理性能 外观 发展方向 分类 按外形分类 按高度分类 按应用分类 按综合能力…

Particle Life粒子生命演化的MATLAB模拟

Particle Life粒子生命演化的MATLAB模拟 0 前言1 基本原理1.1 力影响-吸引排斥行为1.2 距离rmax影响 2 多种粒子相互作用2.1 双种粒子作用2.1 多种粒子作用 3 代码 惯例声明:本人没有相关的工程应用经验,只是纯粹对相关算法感兴趣才写此博客。所以如果有…

Qt 打开文件列表选择文件,实现拖拽方式打开文件

1. 实现打开文件列表选择文件 1.1. 创建 Qt 工程,并添加几个简单控件 这里笔者选用的是 QMainWindow,创建好工程后在 ui 界面设计中添加 QLineEdit、QPushBtton至少这两个控件,如下图摆放。 1.2. 头文件中添加相关操作 在 mainwindow.h 中…

行业追踪,2023-08-29

自动复盘 2023-08-29 凡所有相,皆是虚妄。若见诸相非相,即见如来。 k 线图是最好的老师,每天持续发布板块的rps排名,追踪板块,板块来开仓,板块去清仓,丢弃自以为是的想法,板块去留让…

各个微服务模块之间互相依赖调用的问题

首先是模块之间不能够循环引用,否则会报循环依赖引入的错误。 没有了模块之间的相互依赖,在项目中这两个模块是相互调用的,分别各自定义相应的Feign接口,如下: 最开始写的运行报错的代码如下: FeignCli…

使用ELK(ES+Logstash+Filebeat+Kibana)收集nginx的日志

文章目录 Nginx日志格式修改配置logstash收集nginx日志引入Redis收集日志写入redis从redis中读取日志 引入FilebeatFilebeat简介Filebeat安装和配置 配置nginx转发ES和kibanaELK设置账号和密码 书接上回:《ELK中Logstash的基本配置和用法》 Nginx日志格式修改 默认…