当前位置: 首页 > news >正文

MVC、MVP和MVVM之间的区别

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.lryc.cn/news/456646.html

相关文章:

  • uni-app 打包成app时 限制web-view大小
  • 智能指针(2)
  • [含文档+PPT+源码等]精品基于Nodejs实现的家教服务小程序的设计与实现
  • electron打包报错-winCodeSign无法下载
  • 给Windows系统设置代理的操作方法
  • 高质量带货短视频素材来源推荐
  • torchvision.transforms.Resize()的用法
  • 简单认识 redis -数据类型命令
  • Python 语言学习——应用1.2 数字图像处理(第二节,变换)
  • 【QT Quick】页面布局:手动定位与坐标系转换
  • uniapp自定义导航,全端兼容
  • [论文阅读] DVQA: Understanding Data Visualizations via Question Answering
  • 【PostgreSQL】实战篇——数据备份和恢复的最佳实践和工具
  • 代码随想录算法训练营第二十九天|93.复原IP地址 78.子集 90.子集II
  • 【mysql】使用AbstractRoutingDataSource实现多数据源 与 获取mapper上注解
  • 希沃冰点还原
  • Hadoop服务端口号、Spark端口号、Hive端口号以及启动命令
  • 【C++】--类和对象(3)
  • 国外电商系统开发-运维系统文件上传-高级上传
  • 【MongoDB】mongodb | 部署 | 常用命令
  • 【Chrome浏览器插件--资源嗅探猫抓】
  • 2.4Mybatis——缓存机制
  • 移动技术开发:文件的读取
  • Linux 中的 Makefile 伪目标详解
  • Java基础(中)
  • Leetcode热题100-200 岛屿数量
  • 大数据新视界 --大数据大厂之 GraphQL 在大数据查询中的创新应用:优化数据获取效率
  • swift使用代码结构解析
  • 五、Python基础语法(程序的输入和输出)
  • 【C语言】常见概念