MVVM、MVC的区别、什么是MVVM

一、什么是MVVM

(一)定义

MVVM是Model - View - ViewModel的缩写,它是一种软件架构设计模式,主要用于构建用户界面。这种模式将应用程序分为三个主要部分:

  1. Model(模型层)
    • 它是应用程序中负责数据管理和业务逻辑的部分。例如,在一个电商应用中,Model层可能包含商品信息(如价格、库存等)、用户信息(如用户名、密码等)以及与数据库交互的代码。Model层不直接与用户界面交互,它只关注数据的存储、获取和处理。比如,当商品价格需要根据促销活动进行调整时,Model层会负责计算新的价格,并将新的数据提供给其他部分。
  2. View(视图层)
    • 这是用户直接看到和交互的部分,也就是用户界面。它可以是网页、移动应用的界面等。View层的主要职责是展示数据和接收用户的输入。例如,在一个新闻阅读应用的View层,会显示新闻的标题、内容、图片等信息,并且有按钮让用户可以点赞、评论等。View层不直接处理数据逻辑,它只是将用户的操作(如点击按钮)通知给ViewModel层。
  3. ViewModel(视图模型层)
    • 它是连接View和Model的桥梁。ViewModel层的作用是将Model层的数据转换成View层可以显示的格式,并且将View层的用户操作转化为Model层可以理解的指令。例如,当用户在新闻阅读应用中点击"点赞"按钮时,ViewModel层会接收到这个操作,然后通知Model层去更新点赞数量。同时,当Model层的数据发生变化(如新闻内容更新)时,ViewModel层会将这些数据更新传递给View层,从而更新用户界面。

(二)工作原理

  1. 数据绑定
    • 这是MVVM模式的核心机制之一。在MVVM框架下,View层和ViewModel层之间通过数据绑定进行通信。数据绑定可以是单向的也可以是双向的。单向数据绑定通常是ViewModel到View,例如,ViewModel层从Model层获取新闻标题数据,然后通过数据绑定机制将新闻标题显示在View层的新闻标题区域。双向数据绑定则允许View层和ViewModel层的数据相互更新。例如,在一个表单应用中,用户在输入框(View层)输入内容时,ViewModel层的数据会实时更新,反之亦然。
  2. 命令绑定
    • 用于将用户的操作(如点击按钮)从View层传递到ViewModel层。例如,在一个购物应用中,用户点击"加入购物车"按钮,这个操作会通过命令绑定传递给ViewModel层,ViewModel层再根据业务逻辑(如检查库存等)处理这个操作,并且可能会通知Model层进行数据更新(如增加购物车中的商品数量)。

二、MVVM和MVC的区别

(一)架构组成

  1. MVC(Model - View - Controller)
    • MVC也是将应用程序分为三个部分:Model、View和Controller。
      • Model:和MVVM中的Model类似,负责数据和业务逻辑。
      • View:也是用户界面部分,用于展示数据和接收用户输入。
      • Controller(控制器层):在MVC中,Controller是核心部分,它接收用户从View层传来的请求,然后根据请求去操作Model层,并且将处理结果返回给View层。例如,在一个在线课程平台,当用户点击"报名课程"按钮时,Controller会接收这个请求,然后去检查Model层中的课程信息(如是否还有名额等),如果可以报名,就更新Model层的数据(如增加报名人数),最后将报名成功的信息返回给View层显示给用户。
  2. MVVM
    • 如前面所述,MVVM有Model、View和ViewModel三个部分。ViewModel在MVVM中起到了类似MVC中Controller的作用,但又有所不同。ViewModel更专注于数据绑定和视图逻辑的处理,而不是像Controller那样直接处理用户的请求。

(二)数据流

  1. MVC
    • 数据流是线性的。用户在View层发起操作,请求传递给Controller,Controller处理后更新Model或者将结果返回给View。例如,用户在博客应用中点击"发布文章"按钮,View层将请求发送给Controller,Controller获取文章内容等数据,然后更新Model层(如将文章存储到数据库),最后将发布成功的信息通过View层展示给用户。
  2. MVVM
    • 数据流主要是通过数据绑定来实现的。View层和ViewModel层之间通过数据绑定双向通信,ViewModel层和Model层之间也有数据交互。例如,在一个天气应用中,Model层从天气服务获取天气数据,然后通过ViewModel层的数据绑定机制,将天气信息(如温度、天气状况等)显示在View层。当用户切换城市时,View层通知ViewModel层,ViewModel层再通知Model层获取新城市的天气数据,然后更新View层。

(三)开发效率和复杂度

  1. MVC
    • MVC模式在一些简单的应用程序中比较容易理解和实现。例如,对于一个小型的博客网站,通过MVC模式可以快速搭建起基本的发布文章、浏览文章等功能。但是随着应用程序的复杂度增加,Controller可能会变得臃肿。因为Controller需要处理大量的用户请求和业务逻辑,当功能越来越多时,Controller代码可能会变得难以维护。
  2. MVVM
    • MVVM模式在数据绑定和视图逻辑处理方面有优势,特别是在复杂的用户界面应用中。例如,在一个具有复杂表单和动态数据更新的企业管理软件中,MVVM模式可以通过数据绑定减少大量的模板代码,使得开发者可以更专注于业务逻辑的实现。不过,MVVM的学习曲线相对较高,需要开发者理解数据绑定、命令绑定等概念,并且在一些简单的应用中可能会显得过于复杂。
相关推荐
optimistic_chen1 天前
【Java EE进阶 --- SpringBoot】Spring IoC
spring boot·后端·spring·java-ee·mvc·loc
wuk9981 天前
在Spring MVC中使用查询字符串与参数
java·spring·mvc
原来是好奇心2 天前
深入剖析Spring Boot中Spring MVC的请求处理流程
spring boot·spring·mvc
xkroy2 天前
创建Spring MVC和注解
学习·spring·mvc
期待のcode2 天前
SpringMVC的请求接收与结果响应
java·后端·spring·mvc
Pure03193 天前
Spring MVC BOOT 中体现的设计模式
spring·设计模式·mvc
The Sheep 20233 天前
.NetCore MVC
mvc·.netcore
YDS8293 天前
SpringMVC —— Spring集成web环境和SpringMVC快速入门
java·spring·mvc·springmvc
xkroy3 天前
Sping Web MVC入门
mvc
他们都不看好你,偏偏你最不争气3 天前
【iOS】MVC架构
前端·ios·mvc·objective-c·面向对象