MVC、MVP和MVVM之间的区别

server/2024/10/9 12:29:23/

MVC(Model-View-Controller)隔开业务和UI(一对一)

  1. 角色划分:
    Model:负责处理数据和业务逻辑,通常包括数据的存储、检索和更新等操作。
    View:负责展示用户界面,接收用户输入,并将用户操作传递给 Controller。
    Controller:作为 Model 和 View 之间的中介,负责处理用户输入,调用 Model 进行数据处理,并更新 View 以反映数据的变化。
  2. 交互方式:
    View 和 Model 之间存在直接的依赖关系。View 可以直接访问 Model 中的数据,并且在数据发生变化时,View 需要主动从 Model 中获取新的数据进行更新。
    Controller 负责协调 View 和 Model 之间的交互。当用户在 View 上进行操作时,View 将事件传递给 Controller,Controller 再根据事件类型调用 Model 进行相应的业务处理,并更新 View。
  3. 优缺点:
    优点:
    结构简单,易于理解和实现。
    可以将业务逻辑和用户界面分离,提高代码的可维护性。
    缺点:
    View 和 Model 之间的紧密耦合可能导致代码难以维护和测试。例如,当 Model 中的数据发生变化时,View 需要主动获取数据并更新自己,这增加了代码的复杂性。
    Controller 可能会变得过于庞大和复杂,因为它需要处理所有的用户输入和业务逻辑。
    在这里插入图片描述
  • 主动式
    在这里插入图片描述
  • 被动式
    在这里插入图片描述

MVP(Model-View-Presenter)

  1. 角色划分:
    Model:与 MVC 中的 Model 类似,负责处理数据和业务逻辑。
    View:只负责显示数据和接收用户输入,不包含任何业务逻辑。View 通常通过接口与 Presenter 进行交互。
    定义接口,如UserListView,包含显示用户列表、显示加载进度、显示错误信息等方法。
    Presenter:作为 View 和 Model 之间的中介,负责处理用户输入,调用 Model 进行数据处理,并更新 View。Presenter 通常包含大部分的业务逻辑。
    实现UserListView接口中的方法,负责处理用户输入,调用 Model 进行数据处理,然后更新 View。
  2. 交互方式:
    View 和 Model 之间完全解耦,通过 Presenter 进行间接交互。View 只需要将用户操作传递给 Presenter,Presenter 负责调用 Model 进行数据处理,并将结果返回给 View 进行显示。
    Presenter 与 View 和 Model 都有联系。Presenter 接收来自 View 的用户输入,调用 Model 进行业务处理,并将结果更新到 View。同时,Presenter 也可以从 Model 中获取数据,并将其传递给 View 进行显示。
  3. 优缺点:
    优点:
    更好地实现了 View 和 Model 的解耦,使得代码更易于维护和测试。
    Presenter 可以进行单元测试,而不需要依赖于 Android 框架,提高了测试的效率和可靠性。
    缺点:
    代码量相对较大,因为需要定义接口来实现 View 和 Presenter 之间的交互。
    Presenter 可能会变得复杂,特别是当业务逻辑较多时。
    在这里插入图片描述

MVVM(Model-View-ViewModel)

  1. 角色划分:
    Model:与 MVC 和 MVP 中的 Model 类似,负责处理数据和业务逻辑。
    View:负责显示数据和接收用户输入,不包含任何业务逻辑。View 通过数据绑定与 ViewModel 进行交互。
    ViewModel:作为 View 和 Model 之间的桥梁,负责处理业务逻辑,并将数据以可观察的方式提供给 View。ViewModel 通常包含大部分的业务逻辑和数据处理代码。
  2. 交互方式:
    View 和 Model 之间通过 ViewModel 进行间接交互。View 通过数据绑定机制自动更新显示的数据,而不需要手动从 ViewModel 中获取数据。当用户在 View 上进行操作时,View 将事件传递给 ViewModel,ViewModel 进行相应的业务处理,并更新数据,从而自动更新 View。
    ViewModel 与 Model 进行交互,获取数据并进行处理,然后将处理后的数据以可观察的方式提供给 View。View 只需要关注数据的变化,而不需要关心数据的来源和处理过程。
  3. 优缺点:
    优点:
    实现了更好的 View 和 Model 的解耦,代码结构更加清晰,易于维护和测试。
    数据绑定机制使得 View 的更新更加自动和高效,减少了手动更新 View 的代码量。
    ViewModel 可以进行单元测试,而不需要依赖于 Android 框架。
    缺点:
    学习成本相对较高,需要掌握数据绑定等新的技术和概念。
    对于复杂的界面和业务逻辑,ViewModel 可能会变得复杂,需要合理地组织代码。
    在这里插入图片描述

在这里插入图片描述


http://www.ppmy.cn/server/129264.html

相关文章

高速机器人的点动与直线运动

工业机器人中的点动和直线运动非常之重要,接下来说一下他们的实现过程。 点动: 点动包括两个部分,第一个点动是每一个关节电机的点动,第二个是机器末端向xyz的三个方向进行点动处理。 第一个点动是非常简单的,即把对…

【MAUI】【Bug】UserDialogs.Instance.ShowLoading在ViewModel失效?

在后置代码中使用正常 private async void OnStartOCRClicked(object sender, EventArgs e){UserDialogs.Instance.ShowLoading(

网络防火墙的主要功能及其弊端

防火墙(Firewall),也称防护墙,是由Check Point 创立者Gil Shwed于1993 年发明并引入国际互联网。 它是一种位于内部网络与外部网络之间的网络安全系统。是一项信息安全的防护系统,依照特定的规则,允许或是…

学习笔记-ubantu -mysql8

小遗漏 描述解决方案注意原因 描述 在ubantu20下正常安装mysql8之后 navicat也能正常远程连接之后 通过代码进行访问时,提示The server requested authentication method unknown to the client 解决方案 找到mysql.cnf文件 在[mysqld]下 添加 default_authentic…

助力信息学奥赛-VisuAlgo:提升编程与算法学习的可视化工具

VisuAlgo 是一个在线的可视化工具,专为编程学习者和算法爱好者设计。它通过将复杂的算法和数据结构以图形化的方式展示,使得学习者能够直观地理解和掌握这些概念。该网站支持多种语言版本,包含中文,对于少儿编程和信息学奥赛的参赛…

如何使用ssm实现基于MVC构架的网上食品店的设计与实现+vue

TOC ssm799基于MVC构架的网上食品店的设计与实现vue 研究背景 自计算机发展以来给人们的生活带来了改变。第一代计算机为1946年美国设计,最开始用于复杂的科学计算,占地面积、开机时间要求都非常高,经过数十几的改变计算机技术才发展到今天…

007集—— 自动获取图形的外边界(外轮廓)(CAD—C#二次开发入门)

本文只适用于闭合多段线组成的图像,其他情况(圆、弧、椭圆、未封闭line)暂不支持。 效果如下图所示: 原始图: 代码运行后图: 附代码: public class 外轮廓{Database db HostApplicationServic…

目标检测YOLO实战应用案例100讲-【目标检测】YOLOV11

目录 前言 算法原理 YOLO发展历程 什么是 YOLO11 YOLOv11 的主要特点 YOLO各版本概览 核心优势: YOLOv11改进方向 YOLOv11功能介绍 YOLOv11关键创新 YOLOv11 指标展示 YOLOV11实验 环境设置 准备数据集 训练模型 验证模型 应用领域 一、智慧交通与自动驾…