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的学习曲线相对较高,需要开发者理解数据绑定、命令绑定等概念,并且在一些简单的应用中可能会显得过于复杂。
相关推荐
圆滚滚肉肉1 天前
后端MVC(控制器与动作方法的关系)
后端·c#·asp.net·mvc
ajassi20001 天前
开源 C# .net mvc 开发(六)发送邮件、定时以及CMD编程
linux·开源·c#·mvc
blackA_11 天前
JavaWeb学习——day8(MVC模式与session、cookie)
学习·mvc
PHASELESS41112 天前
深入理解Spring MVC:构建灵活Web应用的基石
java·网络·后端·spring·mvc
王有品15 天前
Spring MVC 会话管理实践教程:HttpSession 深入应用
java·spring·mvc
lwb_011815 天前
Spring MVC参数绑定终极手册:单&多参对象集合JSON文件上传精讲
spring·json·mvc
我的炸串拌饼店16 天前
ASP.NET MVC 中SignalR实现实时进度通信的深度解析
后端·asp.net·mvc
CUIYD_198916 天前
Spring MVC 处理静态资源请求 - ResourceHandler
java·spring·mvc
武帝为此19 天前
【SpringMVC 入门介绍】
java·spring·mvc
Cyanto20 天前
Spring MVC 核心枢纽:DispatcherServlet 的深度解析与实践价值
java·spring·mvc