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

介绍一下 MVC MVVM

1. 什么是MVVM?

在MVVM框架下 视图和模型是不能直接通信 的,只能通过ViewModel进行交互,它能够监
听到数据的变化,然后通知视图进行自动更新,而当用户操作视图时,VM也能监听到视图
的变化,然后通知数据做相应改动,这实际上就实现了数据的 双向绑定 。并且V和VM可以
进行通信。

Model(模型)
模型是指代表真实状态内容的领域模型(面向对象),或指代表内容的数据访问层(以数据为中
心)。
View(视图)
就像在MVC和MVP模式中一样,视图是用户在屏幕上看到的结构、布局和外观(UI)。
ViewModel(视图模型)
视图模型是暴露公共属性和命令的视图的抽象。MVVM没有MVC模式的控制器,也没有MVP模式的presenter,有的是一个绑定器。在视图模型中,绑定器在视图和数据绑定器之间进行通信。

2. 什么是MVC?

MVC是应用最广泛的软件架构之一,一般MVC分为:Model(模型),View(视图),Controller(控制器)。 这主要是基于分层的目的,让彼此的职责分开.View一般用过Controller来和Model进行联系。Controller是Model和View的协调者,View和Model不直接联系。基本都是单向联系。M和V指的意思和MVVM中的M和V意思一样。C即Controller指的是页面业务逻辑。MVC是单向通信。也就是View跟Model,必须通过Controller来承上启下。

Model(模型)表示应用程序核心(如数据库)。

View(视图)显示效果(HTML页面)。

Controller(控制器)处理输入(业务逻辑)。

MVC 模式同时提供了对 HTML、CSS 和 JavaScript 的完全控制。

Model(模型)是应用程序中用于处理应用程序数据逻辑的部分。   通常模型对象负责在数据库中存取数据。

View(视图)是应用程序中处理数据显示的部分。   通常视图是依据模型数据创建的。

Controller(控制器)是应用程序中处理用户交互的部分。   通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据。

3. MVC与MVVM的区别:

MVC和MVVM的区别并不是VM完全取代了C,ViewModel存在目的在于抽离Controller中展示的业务逻辑,而不是替代Controller,其它视图操作业务等还是应该放在Controller中实现。也就是说MVVM实现的是业务逻辑组件的重用。

  • MVC中Controller演变成MVVM中的ViewModel
  • MVVM通过数据来显示视图层而不是节点操作
  • MVVM主要解决了MVC中大量的dom操作使页面渲染性能降低,加载速度变慢,影响用户体验

相关文章:

  • 人工智能_机器学习092_使用三维瑞士卷数据_利用分层聚类算法进行瑞士卷数据三维聚类---人工智能工作笔记0132
  • 冰箱温度预测 C语言xdoj47
  • RLHF几大常用框架实践对比(trlx、deepspeedchat、colossalaichat)
  • SpringBoot灵活集成多数据源(定制版)
  • 【以题代复习】计算机网络 第三章
  • Debian安装k8s记录
  • Jenkins分布式实现: 构建弹性和可扩展的CI/CD环境!
  • 基于OpenAI的Whisper构建的高效语音识别模型:faster-whisper
  • 【教程】Typecho Joe主题开启并修复壁纸相册不显示问题
  • mongodb基本命令操作
  • OpenHarmony之消息机制实现
  • 将PPT4页并排成1页
  • 全志F1C100s Linux 系统编译出错:不能连接 github
  • 计算机基础面试题 |11.精选计算机基础面试题
  • C语言实验4:指针
  • JavaScript 如何正确处理 Unicode 编码问题!
  • Android路由框架AnnoRouter:使用Java接口来定义路由跳转
  • Angular 2 DI - IoC DI - 1
  • IE报vuex requires a Promise polyfill in this browser问题解决
  • interface和setter,getter
  • jQuery(一)
  • maven工程打包jar以及java jar命令的classpath使用
  • Python进阶细节
  • rabbitmq延迟消息示例
  • React组件设计模式(一)
  • SpiderData 2019年2月16日 DApp数据排行榜
  • Vue.js-Day01
  • vue-cli3搭建项目
  • Vue源码解析(二)Vue的双向绑定讲解及实现
  • 阿里云容器服务区块链解决方案全新升级 支持Hyperledger Fabric v1.1
  • 强力优化Rancher k8s中国区的使用体验
  • 手机app有了短信验证码还有没必要有图片验证码?
  • 数据仓库的几种建模方法
  • 远离DoS攻击 Windows Server 2016发布DNS政策
  • media数据库操作,可以进行增删改查,实现回收站,隐私照片功能 SharedPreferences存储地址:
  • Spring Batch JSON 支持
  • 如何用纯 CSS 创作一个货车 loader
  • #pragma预处理命令
  • #基础#使用Jupyter进行Notebook的转换 .ipynb文件导出为.md文件
  • (007)XHTML文档之标题——h1~h6
  • (C语言版)链表(三)——实现双向链表创建、删除、插入、释放内存等简单操作...
  • (Redis使用系列) SpirngBoot中关于Redis的值的各种方式的存储与取出 三
  • (二)springcloud实战之config配置中心
  • (二十五)admin-boot项目之集成消息队列Rabbitmq
  • (附源码)php投票系统 毕业设计 121500
  • (附源码)spring boot校园健康监测管理系统 毕业设计 151047
  • (附源码)ssm教材管理系统 毕业设计 011229
  • (含react-draggable库以及相关BUG如何解决)固定在左上方某盒子内(如按钮)添加可拖动功能,使用react hook语法实现
  • (机器学习的矩阵)(向量、矩阵与多元线性回归)
  • ./indexer: error while loading shared libraries: libmysqlclient.so.18: cannot open shared object fil
  • .NET Core跨平台微服务学习资源
  • .net mvc 获取url中controller和action
  • .NET中winform传递参数至Url并获得返回值或文件
  • [] 与 [[]], -gt 与 > 的比较
  • [AIGC] 如何建立和优化你的工作流?