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 可能会变得复杂,需要合理地组织代码。
相关推荐
AFinalStone21 分钟前
Android 7系统休眠唤醒(七)内核层—wakelock与autosleep机制
android·休眠唤醒
starvapour39 分钟前
在关机键损坏的情况下让手机关机
android·adb·手机
AFinalStone2 小时前
Android 7系统休眠唤醒(五)休眠全链路
android·电源管理·休眠唤醒
zzq77972 小时前
Android 风险识别机制实测:从录屏悬浮窗到远程控制的边界评估
android·安全·安卓·app加固·御盾安全
码云数智-园园3 小时前
MySQL 慢查询排查完整流程
android
码云骑士3 小时前
【Android Performance】进程关联启动治理详解——从唤醒链分析到自启动管控的完整方案
android
心念枕惊4 小时前
PHP 在领域驱动(DDD)设计中的核心实践
android·开发语言·php
蜡台4 小时前
Android WebView 设计指南
android·java·kotlin
晓梦林4 小时前
[Dest0g3 520迎新赛]EasyPHP-学习笔记
android·笔记·学习
朱涛的自习室5 小时前
Munk AI 桌面端「预告」
android·前端·人工智能