一、鸿蒙的“官方推荐”架构
鸿蒙官方在 ArkUI/ArkTS 和 Java HarmonyOS Ability 开发里,推荐用:
1.MVVM(官方最推)
ArkUI/ArkTS 天然支持 数据驱动,也就是 MVVM 核心思想:
Model:数据实体,普通类或 JS 对象
ViewModel:@Observed, @State, @Computed 等管理状态
View:ArkUI Column, Row, Stack 等 UI 组件
数据变化 → UI 自动刷新(无需手动 findView/updateView)
典型标志:
@Observed
class DeviceData {
batteryPercent: number;
online: boolean;
}
@Component
struct DeviceItem {
@ObjectLink data: DeviceData;
build() {
Column() {
Text("电量: " + this.data.batteryPercent + "%")
}
}
}
这个就是 ArkUI 的 MVVM 核心方式。
2.MVP / MVI(非官方也可用)
MVP:
Model: 数据实体
View: ArkUI 页面
Presenter: 普通 TypeScript / Java 类负责业务逻辑
这种方式在鸿蒙 Java 端和 ArkUI 前端都可以实现,但不如 MVVM 官方支持好。
使用场景:你想完全分离逻辑和 UI,类似 Android 老项目迁移。
MVI:
也是数据驱动,但强调 状态不可变 + 单向数据流
对于复杂页面(设备列表、巡检表格、地图轨迹)非常适合
二、鸿蒙开发特点与 Android 不同点
# Android 与 鸿蒙 ArkUI/ArkTS 特性对比
| 特性 | Android | 鸿蒙 ArkUI / ArkTS |
|------|---------|------------------|
| **数据绑定** | LiveData / ViewModel | `@State`, `@Observed` |
| **UI 组件** | XML / Jetpack Compose | Column, Row, Stack, Text, Image |
| **事件绑定** | `setOnClickListener` | `onClick={() => {...}}` |
| **生命周期** | Activity / Fragment | Ability + Component |
| **官方推荐架构** | MVVM + Jetpack | MVVM + ArkUI |
总结:鸿蒙官方就是 ArkUI + MVVM,几乎天然支持,直接用 @Observed/@State 就能做双向绑定。
三、鸿蒙项目常用 MVVM 模式结构
project/
│
├─ model/ # 数据模型
│ └─ Device.ts
│
├─ view/ # 页面组件
│ └─ DevicePage.ts
│
├─ viewmodel/ # 管理状态、提供数据
│ └─ DeviceViewModel.ts
│
├─ service/ # 网络/设备/数据库服务
│ └─ DeviceService.ts
└─ utils/
使用方法:
ViewModel 中保存状态
View 使用 @Observed 或 @State 绑定 ViewModel 数据
数据变化 → UI 自动刷新,无需手动更新
四、安卓开发经验迁移到鸿蒙
LiveData → @Observed/@State
ViewModel → ArkTS/Java 对应 ViewModel 类
DataBinding / Jetpack Compose → Column/Row/Stack + build()
MVP 的 Presenter → ArkTS 类 + 自己调用更新函数
核心区别:鸿蒙更偏 声明式 + 数据驱动,MVVM 天然支持,MVP 只能自己写。
鸿蒙的“官方推荐”架构MVVM
安卓理事人2026-01-17 10:53
相关推荐
Tapdata15 小时前
被忽略的第三类上下文:Agent 进入真实业务后,还缺什么?威哥爱编程16 小时前
模拟面试智能体开发实战 04:面试聊到哪算哪?用状态机把整场面试编排起来威哥爱编程16 小时前
模拟面试智能体开发实战 03:AI 面试官太客气?人设 Prompt 让它像个真考官赤生云电竞16 小时前
GPU算力共享平台架构实践:任务分发与资源隔离的关键配置一条Go18 小时前
OnCall 时段路由:跨午夜、左闭右开与「Local 不是时区」Dawson Zhu20 小时前
【LLM推理与Serving⑨】业务模型推理引擎开发:以BEV自动驾驶为例的专用推理实践Anymous20 小时前
我手写的 Redis 锁,输给了 10 秒的 TTL贾伟康21 小时前
HarmonyOS API 26 Navigation 导航栏位置:navBarPosition、左右布局与折叠屏适配草莓熊Lotso21 小时前
【C++ 基于微服务的即时通讯系统】文件存储子服务实战:UUID生成、文件IO封装与全接口单元测试非优秀程序员1 天前
第04章 邮箱大战,163 与 QQ 的暗战|《互联网产品恩仇录》