MVC与MVVM架构模式

1、MVC

MVC:Model-View-Controller,即模型-视图-控制器

MVC模式是一种非常经典的软件架构模式。从设计模式的角度来看,MVC模式是一种复合模式,它将多个设计模式结合在一种解决方案中,从而可以解决许多设计问题。

MVC模式将用户界面交互拆分到不同的三种角色中,使应用程序被分成三个核心部件:Model(模型)、View(视图)、Controller(控制器),每个核心部件都会各自处理自己的任务。

  1. 模型:数据来源,它是应用程序的主体部分。模型持有所有的业务数据和业务逻辑,并且独立于视图和控制器,当数据发生改变时,它要负责通知视图部分。一个模型能为多个视图提供数据。
  2. 视图:数据渲染(用户界面),它是用户看到并与之交互的界面。视图向用户显示相关的数据,并能接收用户的输入数据,但是它并不做任何实际的业务处理。视图可以向模型查询业务状态,但不能改变模型。对于相同的信息可以有多个不同的显示形式或显示在多个视图中。
  3. 控制器:事件处理,它位于视图和模型之间,负责接收用户的输入,将输入进行解析并反馈给模型。通常一个视图对应一个控制器。例如,当Web用户单击Web页面中的提交按钮来发送HTML表单时,控制器接收请求并调用相应的模型组件去处理请求。

通信过程:

  1. 由用户在视图上做相关操作,发送请求
  2. 视图接收用户请求并调用控制器
  3. 控制器操作模型做数据更新
  4. 数据更新后,模型通知视图数据发生改变
  5. 视图将数据变化呈现给用户

MVC模式优点:

  • 一个模型提供多个视图表现形式,也能够为一个模型创建新的视图而无须重写模型。一旦模型的数据发生变化,模型将通知相关的视图,每个视图相应地刷新自己。
  • 因为模型是独立于视图的,所以可以把一个模型独立地移植到新的平台工作。
  • 在开发界面显示部分时,开发人员仅仅需要考虑的是布局和样式;开发模型时,开发人员仅仅要考虑的是业务逻辑和数据维护,这样能使开发人员专注于某一方面的开发,提高开发效率。

2、MVVM

MVVM:Model-View-ViewModel,即模型-视图-模型视图

MVVM是一种基于MVC的设计,可以理解为将 Controller 替换为 ViewModel(模型视图),同时各部分之间的通信也与MVC有所区别

通信过程:

  1. 用户在视图上做相关操作,例如表单提交。
  2. 视图将请求转交给模型视图。
  3. 模型视图操作模型,数据更新。
  4. 模型处理数据后,通知模型视图数据发生改变。
  5. 模型视图更新视图数据。
  6. 视图将数据变化呈现给用户。

MVVM与MVC的区别:MVVM采用双向绑定(data-binding):视图的变动自动反映在模型视图中,反之亦然。在MVC中,视图是可以直接访问模型的,从而视图会包含模型信息,不可避免地还要包括一些业务逻辑。MVC模式关注的是模型的不变,所以在MVC模式中,模型不依赖于视图,但是视图是依赖于模型的。

MVVM在概念上是真正将页面与数据逻辑分离的模式,它把数据绑定工作放到一个JavaScript文件中去实现,而这个JavaScript文件的主要功能是完成数据的绑定,即把模型视图绑定到视图上。

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

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

相关文章

【3D目标检测】常见相关指标说明

一、mAP指标 mean Average Precision(平均精度均值),它是目标检测和信息检索等任务中的重要性能指标。mAP 通过综合考虑精度和召回率来衡量模型的总体性能。 1.1 精度(Precision) 表示检索到的目标中实际为正确目标…

Spring Task及订单状态定时处理

1:Spring Task概念: Spring Task 是Spring框架提供的任务调度工具,可以按照约定的时间自动执行某个代码逻辑 定时任务的理解 定时任务即系统在特定时间执行一段代码,它的场景应用非常广泛: 购买游戏的月卡会员后&a…

前端如何给特定的组件设置缓存并处理定位问题?

前端如何给某些组件设置缓存并处理定位? 最近有个需求就是a>b,b页面处理了些操作,返回a页面时, b页面若有操作则a页面需要刷新并定位到上次点击的位置,b若没有操作则无需刷新直接定位上次点击的位置 1.首先在store中存储缓存的组件 vuex代码: const cached {state: {ca…

Centos7网络处理name or service not known

1、编辑->虚拟网络编辑器 2、查看本机的ip 3、 /etc/sysconfig/network-scripts/ 查看文件夹下面的 ifcfg-eth33 后面的33可能不一样 vi /etc/resolv.conf 编辑文件添加以下DNS nameserver 114.114.114.114 4、设置本机的网络 5、ping www.baidu.com 先重启…

第50期|GPTSecurity周报

GPTSecurity是一个涵盖了前沿学术研究和实践经验分享的社区,集成了生成预训练Transformer(GPT)、人工智能生成内容(AIGC)以及大语言模型(LLM)等安全领域应用的知识。在这里,您可以找…

js,JavaScript 类型化数组详解(2024-05-04)

1、JavaScript 类型化数组 在 Javascript 中,类型化数组是二进制数据的类似数组的缓冲区。 不存在名为 TypedArray 的 JavaScript 属性或对象,但属性和方法可以与类型化数组对象一起使用: const myArr new Int8Array(10); // 0,0,0,0,0,0…

全双工音频对讲模块-支持空中升级、多级无线中继

SA618F30是一款高集成的大功率全双工无线音频模块,发射功率高达32dBm。该音频模块简化接口,只需外接音频功放或麦克风即可作为一个小型对讲机,方便快捷嵌入到各类手持设备中。支持多级无线中继,支持OTA空中升级。 SA618F30配备1W…

Java快速入门系列-11(项目实战与最佳实践)

第十一章:项目实战与最佳实践 11.1 项目规划与需求分析项目规划需求分析实例代码 11.2 系统设计考虑实例代码 11.3 代码实现与重构实例代码 11.4 性能优化与监控实例代码 11.5 部署与持续集成/持续部署(CI/CD)实例代码 11.1 项目规划与需求分析 在进行任何软件开发…

06_G1调优配置

本章主要介绍,如果G1默认的一些配置无法满足你的需求,要如何进一步调优。 G1的一般建议 一般建议是使用G1并保持默认设置,如有需要,可以通过使用 -Xmx 来设置最大的Java堆大小,同时也可以通过 -XX:MaxGCPauseMillis来…

MySQL数据库失效:潜在场景、影响与应对策略

在当今数字化时代,数据库作为数据存储和管理的核心组件,其稳定性和可靠性直接影响着业务的连续性和用户体验。MySQL,作为最受欢迎的关系型数据库管理系统之一,广泛应用于互联网、金融、教育等多个行业。然而,即便是这样…

NTP 协议获取网络时间

从github 中找到的一份代码进行的修改 板卡是0区,手动加了8个时区 #include <iostream> #include <netdb.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/socket.h> #inclu…

Hikyuu-PF-银行股轮动交易策略实现

今天&#xff0c;带来的是“如何使用 Hikyuu 中的投资组合来实现银行股轮动交易策略”。 这个策略的逻辑很简单&#xff1a;持续持有两支市净率最低银行股&#xff0c;然后每月换仓 定义回测周期与回测标的 同样&#xff0c;首先定义回测周期&#xff1a; # 定义回测日期 …

撰写一份详尽的数据治理实施方案

对于拥有15年经验的资深数据治理工程师而言,是一个复杂而细致的任务,应当涵盖策略规划、组织架构调整、技术选型、流程设计、合规性考量、监控与评估等多个维度。本文概述一个高层次的数据治理实施方案框架,并简要说明每个部分的关键内容。如需深入细节,您可以根据这个框架…

了解内存函数

✨✨欢迎&#x1f44d;&#x1f44d;点赞☕️☕️收藏✍✍评论 个人主页&#xff1a;秋邱博客 所属栏目&#xff1a;C语言 前言 内存函数不止malloc、calloc、realloc、free还有memcpy、memmove、memset、memcmp。前四个的头文件是<stdlib.h>,后四个的头文件是<strin…

Ansible----playbook模块之templates模块、tags模块、roles模块

目录 引言 一、templates模块 &#xff08;一&#xff09;关键信息 &#xff08;二&#xff09;实际操作 1.定义主机组 2.设置免密登录 3.分别建立访问目录 4.定义模板文件 5.创建playbook文件 6.执行剧本 7.验证结果 二、tags模块 &#xff08;一&#xff09;创建…

《QT实用小工具·六十一》带动画的三角形指示箭头

1、概述 源码放在文章末尾 该项目实现了一个带动画效果的三角形指示箭头&#xff0c;项目demo演示如下所示&#xff1a; 用法 interestingindicate.h interestingindicate.cpp 放到工程中&#xff0c;直接使用即可。 注意&#xff1a;建议绝对布局&#xff0c;手动指定 wid…

git stash技巧

1.缘由 有时代码写到一半有新bug要修复&#xff0c;这时可以先暂存当前代码&#xff08;使用git stash&#xff09;&#xff0c;修复完bug再回到原先的暂存文件&#xff08;使用git stash pop&#xff09;继续工作。 2.git stash的常用命令&#xff1a; &#xff08;1&#x…

【大数据】containered学习笔记

文章目录 1. Containerd安装1.1 YUM方式安装 【后端&网络&大数据&数据库目录贴】 1. Containerd安装 1.1 YUM方式安装 获取YUM源 获取阿里云YUM源 wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 查…

华为车BU迈入新阶段,新任CEO对智能车的3个预判

作者 |张马也 编辑 |德新 4月24日&#xff0c;北京车展前夕&#xff0c;华为召开了新一年的智能汽车解决方案新品发布会。 这次发布会&#xff0c;也是华为智能汽车解决方案BU&#xff08;简称「车BU」&#xff09;CEO 靳玉志的公开首秀。 一开场&#xff0c;靳玉志即抛出了…

BACnet转MQTT网关智联楼宇json格式自定义

智能建筑的BACnet协议作为楼宇自动化领域的通用语言&#xff0c;正逐步迈向更广阔的物联网世界。随着云计算和大数据技术的飞速发展&#xff0c;如何将BACnet设备无缝融入云端生态系统&#xff0c;成为众多楼宇管理者关注的焦点。本文将以一个实际案例&#xff0c;揭示BACnet网…