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

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

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

相关推荐
Miguo94well11 小时前
Flutter框架跨平台鸿蒙开发——海龟汤APP的开发流程
flutter·华为·harmonyos·鸿蒙
讯方洋哥11 小时前
HarmonyOS App开发——购物商城应用App开发
harmonyos
无穷小亮11 小时前
Flutter框架跨平台鸿蒙开发——Excel函数教程APP的开发流程
flutter·华为·excel·harmonyos·鸿蒙
无穷小亮12 小时前
Flutter框架跨平台鸿蒙开发——打字练习APP开发流程
flutter·华为·harmonyos·鸿蒙
九 龙13 小时前
Flutter框架跨平台鸿蒙开发——水电缴费提醒APP的开发流程
flutter·华为·harmonyos·鸿蒙
摘星编程15 小时前
React Native鸿蒙版:StackNavigation页面返回拦截
react native·react.js·harmonyos
BlackWolfSky15 小时前
鸿蒙中级课程笔记4—应用程序框架进阶1—Stage模型应用组成结构、UIAbility启动模式、启动应用内UIAbility
笔记·华为·harmonyos
Miguo94well16 小时前
Flutter框架跨平台鸿蒙开发——植物养殖APP的开发流程
flutter·华为·harmonyos·鸿蒙
九 龙16 小时前
Flutter框架跨平台鸿蒙开发——电影拍摄知识APP的开发流程
flutter·华为·harmonyos·鸿蒙
星辰徐哥16 小时前
鸿蒙APP开发从入门到精通:ArkUI组件库详解与常用组件实战
华为·app·harmonyos·组件·arkui·组件库