百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT技术 > 正文

MVVM模式你了解多少?(mvvm是指)

wptr33 2025-05-02 21:37 2 浏览

什么是MVVM模式?

MVVM(Model-View-ViewModel)是一种软件架构设计模式,由微软 WPF(用于替代 WinForm,以前就是用这个技术开发桌面应用程序的)和 Silverlight(类似于 Java Applet,简单点说就是在浏览器上运行的 WPF) 的架构师 Ken Cooper 和 Ted Peters 开发,是一种简化用户界面的事件驱动编程方式。 由 John Gossman(同样也是 WPF 和 Silverlight 的架构师)于 2005 年在他的博客上发表。MVVM 已经非常成熟了,当下流行的 MVVM 框架有 Vue.js , AngularJS 等。

MVVM 源自于经典的 MVC(Model-View-Controller)模式。MVVM 的核心是 ViewModel 层,负责转换 Model 中的数据对象来让数据变得更容易管理和使用,其作用如下:

  • 该层向上与视图层进行双向数据绑定。
  • 向下与Model层通过接口请求进行数据交互。

为什么要使用MVVM?

MVVM 模式和 MVC 模式一样,主要目的是分离视图(View)和模型(Model),它有几大好处:

  • 低耦合: 视图(View)可以独立于 Model 变化和修改,一个 ViewModel 可以绑定到不同的 View上,当 View 变化的时候 Model 可以不变,当 Model 变化的时候 View 也可以不变。
  • 可复用: 你可以把一些视图逻辑放在一个 ViewModel 里面,让很多 View 重用这段视图逻辑。
  • 独立开发: 开发人员可以专注于业务逻辑和数据的开发。(ViewModel),设计人员可以专注于页面设计。
  • 可测试: 界面素来是难以测试的,而现在测试可以针对 ViewModel 来写。

一句话概括架构的本质:所有的架构本质上都是为了解耦。

MVVM的组成部分

MVVM架构如下图所示。

View

View 是视图层,也就是用户界面。前端主要由 HTML 和 CSS 来构建,为了更方便地展现ViewModel 或者 Model层的数据,已经产生了各种各样的前后端模板语言,比如 FreeMarker、Thymeleaf 等,各大 MVVM 框架如 Vue.js,AngularJS,EJS 等也都有自己用来构建用户界面的内置模板语言。

Model

Model 是指数据模型,泛指后端进行的各种业务逻辑处理和数据操控,主要围绕数据库系统展开。这里的难点主要在于需要和前端约定统一的接口规则。

ViewModel

ViewModel 是由前端开发人员组织生成和维护的视图数据层。在这一层,前端开发者对从后端获取的Model 数据进行转换处理,做二次封装,以生成符合 View 层使用预期的视图数据模型。

需要注意的是 ViewModel 所封装出来的数据模型包括视图的状态和行为两部分,而 Model 层的数据模型是只包含状态的。

  • 页面的这一块展示什么,那一块展示什么这些都属于视图状态(展示)。
  • 页面加载进来时发生什么,点击这一块发生什么,这一块滚动时发生什么这些都属于视图行为(交互)

视图状态和行为都封装在了 ViewModel 里。这样的封装使得 ViewModel 可以完整地去描述 View 层。

由于实现了双向绑定,ViewModel 的内容会实时展现在 View 层,这是激动人心的,因为前端开发者再也不必低效又麻烦地通过操纵 DOM 去更新视图。

MVVM 框架已经把最脏最累的一块做好了,我们开发者只需要处理和维护ViewModel,更新数据视图就会自动得到相应更新,真正实现事件驱动编程。

View 层展现的不是 Model 层的数据,而是 ViewModel 的数据,由 ViewModel 负责与Model 层交互,这就完全解耦了 View 层和 Model 层。这个解耦是至关重要的,它是前后端分离方案实施的重要一环。

相关推荐

删库不跑路!我含泪写下了 MySQL 数据恢复大法…

1前言数据恢复的前提的做好备份,且开启...

mysqldump备份操作大全及相关参数详解

mysqldump简介mysqldump是用于转储MySQL数据库的实用程序,通常我们用来迁移和备份数据库;它自带的功能参数非常多,文中列举出几乎所有常用的导出操作方法,在文章末尾将所有的参数详细说明...

MySQL表中没有主键,怎么找到重复的数据

在没有主键的MySQL表中查找重复数据可能会有点复杂,但通过使用下述方法中的任何一种,你都应该能够识别并处理这些重复项。在MySQL中,没有主键的表可能会存在重复的数据行。为了找到这些重复的数据,你可...

MySql 大数据 批量删除 Hint 操作

业务中有会碰到数据库中大量冗余数据的情况。比如压测场景,这个时候就需要我们去清理这些数据。怎么操作呢?这个时候mysql的hint就可以派上用场了,直接上语句:DELETE/*+QU...

Linux卸载MySQL教程(linux 卸载数据库)

在Linux系统中,卸载MySQL需要执行以下步骤:停止MySQL服务在卸载MySQL之前,需要先停止MySQL服务,可以使用以下命令停止MySQL服务:sudosystemctlstopmys...

用SQL语句删除数据库重复数据,只保留一条有效数据

原文链接http://t.zoukankan.com/c-Ajing-p-13448349.html在实际开发中,可能会遇到数据库多条数据重复了,此时我们需要删除重复数据,只保留一条有效数据,用SQ...

Mybatis 如何批量删除数据(mybatis删除多条数据)

Mybatis如何批量删除数据本期以最常用的根据id批量删除数据为例:接口设计1:List类型单参数IntegerdeleteByIds(List<Integer>ids);...

MySQL常用命令汇总(mysql数据库常用命令总结)

以下是一份MySQL常用命令汇总,涵盖数据库、表、数据操作及管理功能,方便快速查阅:一、数据库操作1.连接数据库```bash...

「删库跑路」使用Binlog日志恢复误删的MySQL数据

前言“删库跑路”是程序员经常谈起的话题,今天,我就要教大家如何删!库!跑!路!开个玩笑,今天文章的主题是如何使用Mysql内置的Binlog日志对误删的数据进行恢复,读完本文,你能够了解到:MySQL...

MySQL查询是否安装&amp;删除(判断mysql是否安装)

1、查找以前是否装有mysql命令:rpm-qa|grep-imysql可以看到如下图的所示:...

windows版MySQL软件的安装与卸载(windows卸载mysql5.7)

一、卸载1、软件的卸载方式一:通过控制面板方式二:通过电脑管家等软件卸载方式三:通过安装包中提供的卸载功能卸载...

使用 SQL 语句将 Excel VBA 中的表格修改为 MySQL 数据库

在ExcelVBA中与MySQL数据库进行交互时,通常需要使用ADODB连接来执行SQL语句。以下是一个完整的示例,展示了如何将Excel表格中的数据插入到MySQL数据库的...

MySql数据库Innodb引擎删除一行数据会在内存上留下空洞吗

当使用InnoDB引擎删除一行数据时,实际上并不会在内存上留下空洞。InnoDB存储引擎采用了多版本并发控制(MVCC)机制来实现事务的隔离性,每行记录都会保存两个隐藏列,一个保存行的创建版本,另一个...

MySQL批量生成建表语句(mysql 批量新增)

摘要:MySQL批量生成建表语句关键词:MySQL、大批量、挑选、建表语句整体说明在使用MySQL的时候,遇到需要在大批量的表中,挑选一部分表,权限又只有只读权限,工具又没有合适的,最终使用了My...

MySQL数据库之死锁与解决方案(mysql解决死锁的三种方法)

一、表的死锁产生原因:...