比较鸿蒙应用中MVVM与MVP模式在处理数据流、响应用户事件以及职责划分上的异同?

news/2025/3/15 4:01:27/

鸿蒙应用中MVVM与MVP模式的异同比较:

数据流处理:

  • MVVM

    • 数据流从Model流向ViewModel,通过数据绑定机制(如ObservableFieldLiveData等)自动同步到View。ViewModel持有Model的引用,监听数据变化并更新内部状态,View通过绑定这些状态属性实现自动刷新。
    • 数据反向流动(用户输入或View事件触发的数据更新)通常通过Command模式或数据绑定中的双向绑定机制,直接将View的事件传递给ViewModel处理,ViewModel再调用Model进行数据修改。
    • MVVM模式强调数据驱动,数据变化自动驱动视图更新,减少了手动操作DOM或更新UI的工作。
  • MVP

    • 数据流从Model流向Presenter,Presenter处理完业务逻辑后,通过接口回调或者持有View引用的方式主动通知View更新。
    • 用户输入或View事件首先被View捕获并转发给Presenter,Presenter处理事件并调用Model获取或更新数据,之后再通过View接口将新的数据或指令传递回View进行展示。
    • MVP模式中,数据流的传递更显式,Presenter扮演协调者的角色,负责手动推动数据到View进行更新。

响应用户事件:

  • MVVM

    • 用户事件(如按钮点击、滑动等)通常在View中声明并通过数据绑定直接关联到ViewModel的方法或属性上。ViewModel中对应的处理函数执行业务逻辑,并可能触发Model层数据变动,由于数据绑定的存在,View会自动响应这些变化。
    • 事件处理逻辑在ViewModel中集中管理,View仅负责触发事件和展示结果,保持轻量级。
  • MVP

    • 用户事件在View层被捕获后,通过接口方法传递给Presenter。Presenter根据事件类型执行相应的业务逻辑,可能涉及Model层交互,然后调用View的接口方法告知其更新UI或执行特定动作。
    • MVP模式中,View与Presenter通过明确的接口进行通信,View不直接处理业务逻辑,而是将事件委托给Presenter,Presenter负责具体的响应逻辑。

职责划分:

  • MVVM

    • Model:负责数据的存储、业务逻辑处理和数据提供,对View和ViewModel透明。
    • View:负责UI展示,通过数据绑定与ViewModel建立联系,只关心如何显示数据和响应用户交互,不包含任何业务逻辑。
    • ViewModel:作为View的逻辑封装,持有Model数据的副本或引用,处理业务逻辑和数据转换,提供可供View绑定的公开属性和命令接口,使得View能自动响应数据变化。
  • MVP

    • Model:与MVVM中的Model角色相同,负责数据和业务逻辑。
    • View:同样负责UI展示,但不直接与Model交互。View通过接口暴露自身的操作方法供Presenter调用,同时实现Presenter定义的接口以接收更新指令。
    • Presenter:持有View和Model的引用,负责业务逻辑处理、数据调度以及控制View的行为。Presenter接收到View的事件后处理并调用Model,再根据Model的反馈更新View。

总结:

  • 异同点
    • 相同:两者都遵循分层架构原则,将业务逻辑、数据处理与UI展示分离,都有Model层负责数据和业务逻辑,View层专注于UI呈现。
    • 不同
      • 数据流:MVVM通过数据绑定实现自动数据同步,数据变化自动驱动视图更新;MVP则需要Presenter手动将数据推送给View更新。
      • 事件处理:MVVM中用户事件直接绑定到ViewModel,处理逻辑在ViewModel内;MVP中事件由View传递给Presenter,Presenter处理后再回调View更新。
      • 职责划分:MVVM中ViewModel作为View的逻辑代理,简化View并实现数据驱动;MVP中Presenter更像是协调者,通过接口与View交互,控制View的行为。

在鸿蒙应用开发中,选择MVVM还是MVP模式取决于具体项目需求、团队习惯以及对自动化数据同步、代码可测试性、复杂度管理等方面的偏好。MVVM由于其数据绑定特性,通常被认为更适合构建复杂的、数据驱动型的应用,而MVP在保持清晰职责划分的同时,可能更适合需要高度控制UI更新流程或重视接口契约清晰性的场景。

为了能让大家更好的学习鸿蒙(HarmonyOS NEXT)开发技术,这边特意整理了《鸿蒙开发学习手册》(共计890页),希望对大家有所帮助:https://qr21.cn/FV7h05

鸿蒙开发学习手册》:

如何快速入门:https://qr21.cn/FV7h05

  1. 基本概念
  2. 构建第一个ArkTS应用
  3. ……

开发基础知识:https://qr21.cn/FV7h05

  1. 应用基础知识
  2. 配置文件
  3. 应用数据管理
  4. 应用安全管理
  5. 应用隐私保护
  6. 三方应用调用管控机制
  7. 资源分类与访问
  8. 学习ArkTS语言
  9. ……

基于ArkTS 开发:https://qr21.cn/FV7h05

  1. Ability开发
  2. UI开发
  3. 公共事件与通知
  4. 窗口管理
  5. 媒体
  6. 安全
  7. 网络与链接
  8. 电话服务
  9. 数据管理
  10. 后台任务(Background Task)管理
  11. 设备管理
  12. 设备使用信息统计
  13. DFX
  14. 国际化开发
  15. 折叠屏系列
  16. ……

鸿蒙开发面试真题(含参考答案):https://qr18.cn/F781PH

鸿蒙开发面试大盘集篇(共计319页):https://qr18.cn/F781PH

1.项目开发必备面试
2.性能优化方向
3.架构方向
4.鸿蒙开发系统底层方向
5.鸿蒙音视频开发方向
6.鸿蒙车载开发方向
7.鸿蒙南向开发方向


http://www.ppmy.cn/news/1424404.html

相关文章

在H5开发App应用程序过程中的一些常见问题

哈喽,大家好呀,淼淼又来和大家见面啦,H5开发是一种可以跨平台、跨设备、且可以在各种设备上运行,无需安装额外的应用程序。最近有许多小伙伴跟我聊到在h5开发App应用程序的过程中遇到了一些问题,今天我们就这些问题来做…

VUE-列表

VUE-列表 列表功能 如下例子 列表展示 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><meta http-equiv&qu…

机器学习和深度学习 -- 李宏毅(笔记与个人理解)Day 13

Day13 Error surface is rugged…… Tips for training :Adaptive Learning Rate critical point is not the difficult Root mean Square --used in Adagrad 这里为啥是前面的g的和而不是直接只除以当前呢? 这种方法的目的是防止学习率在训练过程中快速衰减。如果只用当前的…

前端请求404,后端保无此方法

1、微信小程序前端路径404 2、后端报无此路径 3、查看路径下对应的方法 发现忘了在list方法前加GetMapping(“/list”)&#xff0c;加上即可

【python+Excel】读取和存储测试数据完成接口自动化测试

http_request2.py用于发起http请求 #读取多条测试用例 #1、导入requests模块 import requests #从 class_12_19.do_excel1导入read_data函数 from do_excel2 import read_data from do_excel2 import write_data from do_excel2 import count_case #定义http请求函数COOKIENon…

20.安全性测试与评估

每年都会涉及&#xff1b;可能会考大题&#xff1b;多记&#xff01;&#xff01;&#xff01; 典型考点&#xff1a;sql注入、xss&#xff1b; 从2个方面记&#xff1a; 1、测试对象的功能、性能&#xff1b; 2、相关设备的工作原理&#xff1b; 如防火墙&#xff0c;要了解防…

【LeetCode热题100】【动态规划】乘积最大子数组

题目链接&#xff1a;152. 乘积最大子数组 - 力扣&#xff08;LeetCode&#xff09; 要找乘积最大的连续子数组&#xff0c;我们之前做过找和最大的连续子数组【LeetCode热题100】【普通数组】最大子数组和-CSDN博客 对于和来讲&#xff0c;定义dp[i]是以nums[i]为结尾的最大…

常见分类算法及其应用

常见分类算法及其应用 一、引言 在机器学习和数据挖掘领域&#xff0c;分类算法是非常重要的一类算法。它们被广泛应用于各种场景&#xff0c;如邮件过滤、金融欺诈检测、疾病预测等。本文将介绍几种常见的分类算法&#xff0c;包括逻辑回归、决策树、随机森林、支持向量机和…