鸿蒙应用中MVVM与MVP模式的异同比较:
数据流处理:
-
MVVM:
- 数据流从Model流向ViewModel,通过数据绑定机制(如
ObservableField
、LiveData
等)自动同步到View。ViewModel持有Model的引用,监听数据变化并更新内部状态,View通过绑定这些状态属性实现自动刷新。 - 数据反向流动(用户输入或View事件触发的数据更新)通常通过Command模式或数据绑定中的双向绑定机制,直接将View的事件传递给ViewModel处理,ViewModel再调用Model进行数据修改。
- MVVM模式强调数据驱动,数据变化自动驱动视图更新,减少了手动操作DOM或更新UI的工作。
- 数据流从Model流向ViewModel,通过数据绑定机制(如
-
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
- 基本概念
- 构建第一个ArkTS应用
- ……
开发基础知识:https://qr21.cn/FV7h05
- 应用基础知识
- 配置文件
- 应用数据管理
- 应用安全管理
- 应用隐私保护
- 三方应用调用管控机制
- 资源分类与访问
- 学习ArkTS语言
- ……
基于ArkTS 开发:https://qr21.cn/FV7h05
- Ability开发
- UI开发
- 公共事件与通知
- 窗口管理
- 媒体
- 安全
- 网络与链接
- 电话服务
- 数据管理
- 后台任务(Background Task)管理
- 设备管理
- 设备使用信息统计
- DFX
- 国际化开发
- 折叠屏系列
- ……
鸿蒙开发面试真题(含参考答案):https://qr18.cn/F781PH
鸿蒙开发面试大盘集篇(共计319页):https://qr18.cn/F781PH
1.项目开发必备面试题
2.性能优化方向
3.架构方向
4.鸿蒙开发系统底层方向
5.鸿蒙音视频开发方向
6.鸿蒙车载开发方向
7.鸿蒙南向开发方向