MVC、MVP、MVVM 模式

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 Tair(兼容Redis),内存型 2GB
简介: MVC、MVP 和 MVVM 是三种常见的软件架构模式,用于分离用户界面和业务逻辑。MVC(Model-View-Controller)通过模型、视图和控制器分离数据、界面和控制逻辑;MVP(Model-View-Presenter)将控制逻辑移到 Presenter 中,减少视图的负担;MVVM(Model-View-ViewModel)通过数据绑定机制进一步解耦视图和模型,提高代码的可维护性和测试性。

一、MVC模式(Model - View - Controller)

  1. 基本概念

    • Model(模型):代表应用程序的数据和业务逻辑。它负责管理数据的存储、检索和更新。例如,在一个电商应用中,Model可以包含商品信息(如名称、价格、库存等)的存储结构,以及对这些数据进行增删改查的操作方法。
    • View(视图):是用户界面的呈现部分,用于向用户展示数据。它从Model获取数据来进行展示,并且通常提供用户交互的接口。比如,在网页应用中,View可以是一个HTML页面,通过某种模板语言(如Jinja2)将Model中的数据渲染成用户可以看到的网页内容。
    • Controller(控制器):起到了连接Model和View的桥梁作用。它接收用户在View上的操作请求(如点击按钮、提交表单等),根据请求调用Model中的相应业务逻辑方法,然后更新View。例如,当用户在电商应用的商品列表页面点击“添加到购物车”按钮时,Controller会接收到这个请求,调用Model中的添加商品到购物车的方法,之后可能会更新购物车的显示视图。
  2. 工作流程

    • 用户在View层进行操作,如输入数据或点击按钮。
    • View将用户操作事件发送给Controller。
    • Controller根据事件类型调用Model中对应的业务逻辑方法,对数据进行处理。
    • Model执行完操作后,将数据状态的变化通知Controller。
    • Controller更新View,使其显示最新的数据状态。
  3. 优缺点

    • 优点
      • 职责分离清晰,便于团队分工开发。不同的开发人员可以专注于Model、View或者Controller的开发。
      • 可维护性和可扩展性较好。由于各部分职责明确,当需要修改某一部分功能时(如更新业务逻辑或者改变用户界面),对其他部分的影响相对较小。
    • 缺点
      • View和Controller之间的耦合度相对较高。如果View的变化比较频繁,可能需要对Controller进行较多的修改。
      • 对于复杂的用户界面,Controller可能会变得臃肿,因为它需要处理大量的用户操作和视图更新逻辑。

二、MVP模式(Model - View - Presenter)

  1. 基本概念

    • Model(模型):与MVC中的Model类似,负责数据存储和业务逻辑处理。
    • View(视图):主要负责显示数据,它定义了用户界面的外观和交互方式。但是在MVP中,View是比较“被动”的,它通常只提供用户交互接口,不包含业务逻辑。
    • Presenter(主持人):它是MVP模式的核心。Presenter从Model获取数据,然后将数据格式转换为View能够理解的形式,并将数据传递给View进行显示。同时,Presenter接收View的用户操作事件,调用Model中的业务逻辑方法来处理这些事件。例如,在一个天气应用中,Presenter会从Model(获取天气数据的接口)获取天气数据,然后将数据处理成适合View(如天气图标和温度数字的显示格式)展示的形式,当用户在View中刷新天气数据时,Presenter会调用Model中的数据更新方法。
  2. 工作流程

    • 用户在View上进行操作。
    • View将用户操作事件发送给Presenter。
    • Presenter调用Model中的业务逻辑方法来处理数据。
    • Model将数据返回给Presenter。
    • Presenter将数据处理后传递给View进行显示。
  3. 优缺点

    • 优点
      • 降低了View和Model之间的耦合度。View只与Presenter交互,不直接依赖Model,使得View的可替换性增强。
      • 方便进行单元测试。由于Presenter不涉及复杂的视图渲染逻辑,主要是数据处理和业务逻辑的调用,所以更容易进行单元测试。
    • 缺点
      • 因为引入了Presenter,代码结构相对复杂一些,开发成本可能会增加。
      • Presenter可能会变得过于复杂,承担了大量的数据转换和业务逻辑与视图交互的工作。

三、MVVM模式(Model - View - ViewModel)

  1. 基本概念

    • Model(模型):和前面两种模式类似,包含数据和业务逻辑。
    • View(视图):负责用户界面的展示,与用户进行交互。
    • ViewModel(视图模型):它是MVVM的关键部分。ViewModel对Model中的数据进行包装和转换,使其能够方便地被View绑定和使用。ViewModel还提供了一些命令(Commands),用于处理View中的用户操作。例如,在一个音乐播放应用中,ViewModel可以将音乐文件的相关数据(如歌曲名、歌手、时长等)进行包装,通过数据绑定的方式让View(如播放列表界面)能够直接显示这些数据。同时,ViewModel可以提供“播放”“暂停”等命令,当用户在View中点击播放或暂停按钮时,View通过绑定的方式调用ViewModel中的相应命令,ViewModel再去调用Model中的播放或暂停音乐的业务逻辑。
  2. 工作流程

    • Model的数据发生变化时,ViewModel会感知到这种变化并更新自己的数据状态。
    • View通过数据绑定机制自动获取ViewModel更新后的数据,从而更新自己的显示。
    • 用户在View上进行操作,View通过数据绑定调用ViewModel中的命令。
    • ViewModel根据命令调用Model中的业务逻辑方法来处理数据。
  3. 优缺点

    • 优点
      • 数据绑定机制使得View和ViewModel之间的交互更加简洁高效。开发人员不需要手动更新视图,当数据变化时,视图会自动更新。
      • 提高了代码的可维护性和可测试性。ViewModel的分离使得业务逻辑和视图逻辑更加清晰,方便分别进行维护和测试。
    • 缺点
      • 数据绑定的实现可能会比较复杂,不同的框架实现数据绑定的方式和性能也有所不同。
      • 对于简单的应用场景,使用MVVM可能会增加不必要的复杂性。
相关文章
|
24天前
|
前端开发
MVVM是什么?和MVC有何区别呢?
【10月更文挑战第11天】MVVM 和 MVC 都是为了更好地组织和管理软件架构,提高开发效率和代码质量。理解它们的特点和区别,有助于我们在实际开发中做出更合适的选择,并构建出更加优秀的应用程序。
|
2月前
|
设计模式 开发框架 前端开发
MVC 模式在 C# 中的应用
MVC(Model-View-Controller)模式是广泛应用于Web应用程序开发的设计模式,将应用分为模型(存储数据及逻辑)、视图(展示数据给用户)和控制器(处理用户输入并控制模型与视图交互)三部分,有助于管理复杂应用并提高代码可读性和维护性。在C#中,ASP.NET MVC框架常用于构建基于MVC模式的Web应用,通过定义模型、控制器和视图,实现结构清晰且易维护的应用程序。
51 2
|
1月前
|
前端开发 Java
【案例+源码】详解MVC框架模式及其应用
【案例+源码】详解MVC框架模式及其应用
56 0
|
2月前
|
前端开发 测试技术 开发者
MVC模式在现代Web开发中有哪些优势和局限性?
MVC模式在现代Web开发中有哪些优势和局限性?
|
2月前
|
设计模式 前端开发 PHP
PHP中实现简易的MVC模式
【8月更文挑战第31天】 本文将引导你了解如何在PHP中应用MVC(Model-View-Controller)架构模式,通过一个简单的例子展示其实现过程。我们将从基础的概念出发,逐步深入到代码实践,最终让你能够自己动手构建一个简易的MVC框架。文章不仅提供理论知识,还包含具体的代码示例,帮助你更好地理解并运用MVC模式。
|
设计模式 JSON 前端开发
MVC框架模式技术实例(用到隐藏帧、json、仿Ajax、Dom4j、jstl、el等)(2)
MVC框架模式技术实例(用到隐藏帧、json、仿Ajax、Dom4j、jstl、el等)
142 0
MVC框架模式技术实例(用到隐藏帧、json、仿Ajax、Dom4j、jstl、el等)(2)
|
设计模式 JSON 前端开发
MVC框架模式技术实例(用到隐藏帧、json、仿Ajax、Dom4j、jstl、el等)(1)
MVC框架模式技术实例(用到隐藏帧、json、仿Ajax、Dom4j、jstl、el等)
191 0
MVC框架模式技术实例(用到隐藏帧、json、仿Ajax、Dom4j、jstl、el等)(1)
|
3月前
|
开发框架 前端开发 .NET
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
48 0
|
6月前
|
开发框架 前端开发 .NET
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
191 0
|
6月前
|
开发框架 前端开发 JavaScript
JavaScript云LIS系统源码ASP.NET CORE 3.1 MVC + SQLserver + Redis医院实验室信息系统源码 医院云LIS系统源码
实验室信息系统(Laboratory Information System,缩写LIS)是一类用来处理实验室过程信息的软件,云LIS系统围绕临床,云LIS系统将与云HIS系统建立起高度的业务整合,以体现“以病人为中心”的设计理念,优化就诊流程,方便患者就医。
79 0