HarmonyOS 多页面架构设计模式总结

------从"能跑"到"可维护、可扩展"的工程化实践

在 HarmonyOS 项目中,页面数量一旦超过 5 个,如果没有清晰的多页面架构设计,很快就会出现以下问题:

  • 路由混乱,页面之间互相跳转像"意大利面"

  • 页面状态靠参数硬传,改一个页面牵一片

  • 生命周期逻辑分散,难以统一管理

  • 后期加新功能,不敢动老代码

本文将结合 Stage 模型 + ArkUI ,系统性总结 HarmonyOS 多页面架构的设计模式与最佳实践,帮你把项目从"Demo 级"升级到"工程级"。


一、HarmonyOS 的多页面基础认知

在 Stage 模型下,HarmonyOS 的页面体系核心是:

复制代码
Application
 └── Ability (UIAbility)
     └── Window
         └── Page(ArkUI 页面)

页面切换的本质

  • HarmonyOS 不是 Activity 栈

  • 页面通过 Router 管理

  • UIAbility 通常只有 1 个(推荐)

结论
多页面 ≠ 多 Ability,而是多 Page


二、最基础的架构:单 Ability + Router 页面栈

推荐起手式

复制代码
entry/
 ├── pages/
 │    ├── Home.ets
 │    ├── Detail.ets
 │    ├── Login.ets
 │    └── Profile.ets
 └── EntryAbility.ets

路由跳转示例

复制代码
import router from '@ohos.router';

router.pushUrl({
  url: 'pages/Detail',
  params: {
    id: 1001
  }
});

页面接收参数

复制代码
@Entry
@Component
struct Detail {
  aboutToAppear() {
    const params = router.getParams() as { id: number };
    console.info('id:', params.id);
  }
}

✔ 简单

参数泛滥、页面强耦合


三、进阶一:路由分层设计(Router 封装模式)

问题

  • 页面中到处 router.pushUrl

  • URL 写死,改路径成本极高

解决方案:统一路由层

复制代码
common/
 └── router/
      ├── RouteMap.ts
      └── AppRouter.ts
RouteMap.ts
复制代码
export enum RoutePath {
  HOME = 'pages/Home',
  DETAIL = 'pages/Detail',
  LOGIN = 'pages/Login'
}
AppRouter.ts
复制代码
import router from '@ohos.router';
import { RoutePath } from './RouteMap';

export class AppRouter {
  static toDetail(id: number) {
    router.pushUrl({
      url: RoutePath.DETAIL,
      params: { id }
    });
  }

  static toLogin() {
    router.replaceUrl({ url: RoutePath.LOGIN });
  }
}
页面中使用
复制代码
AppRouter.toDetail(1001);

好处

  • 页面不关心路由细节

  • 路径集中管理

  • 方便后期埋点 / 权限校验


四、进阶二:页面职责拆分(Page ≠ Logic)

错误示范(典型新手写法)

复制代码
@Component
struct Home {
  async loadData() {
    // 网络
    // 缓存
    // 数据处理
  }
}

推荐模式:Page + ViewModel

复制代码
pages/
 ├── Home/
 │    ├── HomePage.ets
 │    └── HomeViewModel.ets
HomeViewModel.ts
复制代码
@ObservedV2
export class HomeVM {
  @Local list: string[] = []

  async load() {
    this.list = ['A', 'B', 'C']
  }
}
HomePage.ets
复制代码
@ComponentV2
struct HomePage {
  private vm = new HomeVM()

  aboutToAppear() {
    this.vm.load()
  }

  build() {
    List() {
      ForEach(this.vm.list, item => {
        Text(item)
      })
    }
  }
}

本质

  • 页面只负责展示

  • 逻辑可测试、可复用


五、进阶三:全局状态 + 页面解耦

典型场景

  • 登录状态

  • 用户信息

  • 权限信息

全局状态容器

复制代码
@ObservedV2
export class AppStore {
  @Local isLogin = false
  @Local userName = ''
}

export const appStore = new AppStore()

页面中使用

复制代码
@ComponentV2
struct Profile {
  build() {
    if (appStore.isLogin) {
      Text(`欢迎:${appStore.userName}`)
    } else {
      Button('去登录').onClick(() => {
        AppRouter.toLogin()
      })
    }
  }
}

页面不再直接互相依赖,而是通过状态协作


六、进阶四:多页面生命周期协同设计

常用生命周期

生命周期 场景
aboutToAppear 页面进入
onPageShow 可见
onPageHide 被覆盖
aboutToDisappear 离开

推荐实践

  • 数据加载:aboutToAppear

  • 埋点 / 动画:onPageShow

  • 暂停任务:onPageHide

    aboutToAppear() {
    this.vm.load()
    }

    onPageHide() {
    this.vm.pauseTimer()
    }


七、进阶五:模块化多页面架构(大项目必备)

目录示例

复制代码
features/
 ├── login/
 ├── home/
 ├── order/
 └── profile/

每个 feature 自己管理:

  • 页面

  • ViewModel

  • 路由注册

效果

  • 模块可插拔

  • 多人协作冲突少

  • 接近 Android 的 Feature 模块化


八、HarmonyOS 多页面架构最佳实践总结

一句话总结

页面只负责 UI,路由统一管理,状态集中托管,逻辑模块化拆分

推荐组合

  • Stage 模型 + 单 UIAbility

  • Router 封装

  • ViewModel(@ObservedV2)

  • 全局 Store

  • Feature 模块化


九、结语

HarmonyOS 的多页面架构并不复杂 ,难点不在 API,而在工程设计意识

如果你:

  • 正在从 Android 转 HarmonyOS

  • 或正在做一个中大型鸿蒙项目

那么尽早建立清晰的多页面架构,会极大降低后期维护成本

相关推荐
以太浮标17 小时前
华为eNSP模拟器综合实验之-DHCP服务中继配置案例
网络·华为·智能路由器·信息与通信
游戏技术分享17 小时前
【鸿蒙游戏技术分享 第75期】AGC后台批量导入商品失败,提示“参数错误”
游戏·华为·harmonyos
No Silver Bullet18 小时前
HarmonyOS NEXT开发进阶(十七):WebView 拉起 H5 页面
华为·harmonyos
liuhaikang18 小时前
【鸿蒙HarmonyOS Next App实战开发】口语小搭档——应用技术实践
harmonyos
北方的流星19 小时前
华为交换机MSTP和VRRP综合应用配置
运维·网络·华为
C雨后彩虹21 小时前
简易内存池
java·数据结构·算法·华为·面试
liuhaikang21 小时前
鸿蒙VR视频播放库——md360player
音视频·vr·harmonyos
北方的流星1 天前
华为交换机IPv6静态路由、默认路由、RIPng和OSPFv3路由配置
运维·网络·华为
飞露1 天前
鸿蒙Preview预览文件失败原因
华为·harmonyos
夏小鱼的blog1 天前
【HarmonyOS应用开发入门】第五期:状态管理V2入门 - 1
harmonyos·状态管理