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 可能会变得复杂,需要合理地组织代码。
相关推荐
o0o_-_1 小时前
【rust/egui/android】在android中使用egui库
android·开发语言·rust
lynn8570_blog6 小时前
CoroutineWorker 压缩图片示例
android·kotlin
渗透测试中心6 小时前
2024 闽盾杯-黑盾赛道WP
android
i5346 小时前
jni,java,c
android
齐适杨6 小时前
recyclerView(kotlin)
android·开发语言·kotlin
Android 开发者8 小时前
Android Studio Koala Feature Drop 稳定版现已推出
android·ide·android studio
NullPointerExcept9979 小时前
Android自定义柱状图
android
NullPointerExcept9979 小时前
Android全屏模式下,即使设置windowSoftInputMode为adjustResize,键盘未推移Activity导致无法生效
android
Geekersoft10 小时前
Android 解锁工具的主题:适用于所有安卓手机的 5 款安卓解锁工具
android·windows·智能手机·电脑·手机·笔记本电脑·学习方法