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

news2024/12/25 12:23:14

鸿蒙应用中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.coloradmin.cn/o/1605195.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

图深度学习——1.介绍

1、介绍 在数学中,图是描述于一组对象的结构,其中某些对象对在某种意义上是“相关的”(存在某种关系)。这些对象对应于称为顶点的数学抽象(也称为节点或点),并且每个相关的顶点对都称为边&…

视频批量采集下载爬取软件|短视频爬虫提取工具

轻松获取视频!视频批量下载神器问世 在日常工作中,我们经常需要大量的视频资源来支持各种需求,但传统的获取方式通常耗时费力,一个一个复制链接下载实在效率太低。为了解决这一难题,我们自主研发了一款强大的短视频批…

分类预测 | Matlab实现KPCA-ISSA-LSSVM基于核主成分分析和改进麻雀优化算法优化最小二乘支持向量机分类预测

分类预测 | Matlab实现KPCA-ISSA-LSSVM基于核主成分分析和改进麻雀优化算法优化最小二乘支持向量机分类预测 目录 分类预测 | Matlab实现KPCA-ISSA-LSSVM基于核主成分分析和改进麻雀优化算法优化最小二乘支持向量机分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述…

flex上下固定中间占固定高度(中间左右菜单)且内容自动滚动

效果图 布局&#xff1a; <view class"pop_tSet"><view class"pop_Con"><view class"box_bb"><view class"bb_title">{{titleObj[popType]}}</view></view><view class"box_bb_bot"…

固体矿产资源储量分类GBT17766-2020

1999分类标准采用三轴体系划分资源量与处理&#xff0c;表达复杂、经济意义划分过细、实用性不强 虽然不再采用”三轴“表达方式&#xff0c;但依然考虑地质可靠程度、经济意义、可行性评价 矿产资源勘查&#xff1a;通常依靠地球科学知识&#xff0c;运用地质填图&#xff0…

8条指南教你设计奶油风客厅。福州中宅装饰,福州装修

作为一名专业的设计师&#xff0c;我将为您带来一些关于奶油风客厅设计的干货。奶油风是一种温馨、柔和的装修风格&#xff0c;以下是一些设计指南&#xff0c;帮助您打造一个舒适而美丽的奶油风客厅。 1. 色彩搭配 除了米色、浅黄色和淡粉色等基础色调&#xff0c;还可以尝试…

Python程序设计 二维列表(二)

实验九 二维列表 1. 血压统计 血压的正常范围是 60mmHg<舒张压<90mmHg 90mmHg<收缩压<140mmHg 输入小张测量血压的日期&#xff0c;舒张压和收缩压&#xff0c;存放到列表xy中 将小张血压不正常次数百分比计算并显示出来 将小张血压不正常的日期&#xff0c;舒张…

Vscode | Python | launch.json配置gevent多进程断点失效问题处理

Vscode | Python | launch.json配置gevent多进程断点失效问题处理 文章目录 情况描述↓↓↓解决办法直接看这里↓↓↓ 情况描述 launch.json {// Use IntelliSense to learn about possible attributes.// Hover to view descriptions of existing attributes.// For more i…

MATLAB中gurobi 运行报错与调试

问题背景如下&#xff1a;刚拿到一份MATLAB的代码&#xff0c;但是电脑第一次安装gurobi&#xff0c;在运行过程中发生了报错&#xff0c;使用断点进行调试和步进调试方法&#xff0c;最终发现&#xff0c;这个问题出在了哪一步&#xff0c;然后向了人工智能和CSDN、百度寻求答…

以时分秒为单位累计设备运行时间功能块(SMART PLC梯形图代码)

1、SMART PLC设备累计运行时间功能块 SMART PLC设备累计运行时间功能块_plc计算累计时间-CSDN博客文章浏览阅读765次。PLC FC 、FB、子程序、函数学习笔记_RXXW_Dor的博客-CSDN博客FC、 FB、 子程序&#xff0c;&#xff08;甚至包括一些指令&#xff09;这些称呼其实并没有本…

MySQL中InnoDB存储引擎详细介绍

介绍 InnoDB是一种兼顾高可靠性高和高性能的通用存储引擎&#xff0c;在MySQL5.5之后&#xff0c;InnoDB是默认的MySQL存储引擎。 特点 DML(增删改)操作遵循ACID(事务四大特性)模型&#xff0c;支持事务&#xff1b;行级锁&#xff0c;提高并发访问性能支持外链FORELGN KEY约…

Linux 认识与学习Bash——1

在Linux系统中&#xff0c;有多种命令和技巧可以帮助用户与shell交互、管理变量以及执行命令。以下是对您提供的信息的简化和概述&#xff1a; 命令查找和信息 which&#xff1a;查找系统路径中的命令位置。whereis&#xff1a;查找命令的二进制文件、源代码和手册页。type&a…

c++二分排序(向右

描述 给出有 n 个元素的由小到大的序列&#xff0c;请你编程找出某元素最后一次出现的位置。 (n<10^6 输入描述 第一行&#xff1a;一个整数&#xff0c;表示由小到大序列元素个数&#xff1b;下面 n 行&#xff0c;每行一个整数&#xff1b; 最后一行 一个整数 x&#x…

05_数组和结构体

结构体 结构体的使用(重点) 结构体值传参 传值是指将参数的值拷贝一份传递给函数&#xff0c;函数内部对该参数的修改不会影响到原来的变量 结构体地址传递 传址是指将参数的地址传递给函数&#xff0c;函数内部可以通过该地址来访问原变量&#xff0c;并对其进行修改。…

图片批量高效美化,支持图片批量旋转,360度自由旋转,让图片焕然一新!

在这个视觉为王的时代&#xff0c;图片已成为我们传达信息、展示创意的重要载体。然而&#xff0c;面对海量的图片资源&#xff0c;如何快速、高效地进行图片处理&#xff0c;让它们更好地呈现我们的想法和创意呢&#xff1f; 第一步&#xff0c;进入首助编辑高手的图片批量处…

day82 过滤器 监听器

过滤器 监听器 一 过滤器 手动在web.xml配置过滤器 url-pattern设置过滤器要保护的资源的路径 每当我打开一次index.jsp页面或者第一个jsp.jsp页面&#xff0c;都会在控制台输出&#xff1a;------------- 表示先走过一次过滤器 添加注解的方式配置过滤器 value值代表要保护…

Win11关闭Bitlocker

Win11关闭Bitlocker - 知乎 Win11默认开启 Bitlocker功能&#xff0c;如果想关闭&#xff0c;可参照以下步骤&#xff1a; 1.点击开始菜单&#xff0c;选择设置 2.点击左侧“隐私和安全性”菜单&#xff0c;然后进入右侧的“设备加密”选项 3.将设备加密选项关闭即可 点击关闭…

【Linux】Linux基础与常用指令大全

文章目录 操作系统是什么&#xff1f;1. Linux家族介绍2. Linux的安装方式3. 常用指令3.1 ls [选项] [目录/文件]&#xff08;显示目录或文件信息&#xff09;3.2 pwd&#xff08;显示当前所在目录&#xff09;3.3 任意指令加上 --help&#xff08;查看指令的用法&#xff09;3…

腾讯云APP备案指南:一站式完成备案手续,助您顺利上线

工信部最新通知要求所有互联网信息服务提供者完成移动互联网应用程序备案手续。腾讯云为开发者提供了简单易行的备案流程&#xff0c;本文详细解答如何在腾讯云平台完成备案&#xff0c;帮助开发者快速上线自己的APP。从验证备案域名到腾讯云审核&#xff0c;一步步指导您完成备…

视频素材库在哪里找免费?几个短视频素材大全告诉您

在这个视觉传达愈发重要的数字时代&#xff0c;拥有一库多样而高质量的视频素材是每位创作者的必备武器。从广告制作到社交媒体分享&#xff0c;优质的视频素材不仅能够增强视觉效果&#xff0c;还能显著提升受众的参与度。以下是一系列精选的全球视频素材网站&#xff0c;旨在…