欢迎光临
我们一直在努力

第一篇|HarmonyOS ArkTS 工程架构实战:从转盘决定吧拆解 entry 模块分层

摘要

本文基于真实 HarmonyOS 项目 D:\\huawei\\one4,分析一个 ArkTS 应用如何做工程分层。项目名为“转盘决定吧”,包名 com.jiaweikang.one4,目标设备包含手机、平板和 2 合 1。文章重点不是介绍目录名,而是解释为什么要把页面、组件、服务、模型、工具、路由拆开,以及这种拆分如何影响后续的阅读功能、语音朗读、多设备适配和 AppGallery 发布。

1. 先从配置链路判断项目边界

HarmonyOS 项目不能只从 pages 开始看。真正决定应用身份和发布边界的是这几类配置:

AppScope/app.json5

entry/src/main/module.json5

entry/src/main/resources/base/profile/main_pages.json

build-profile.json5

应用身份在 AppScope/app.json5

{

  "bundleName": "com.jiaweikang.one4",

  "versionCode": 2000004,

  "versionName": "1.0.5",

  "icon": "$media:layered_image",

  "label": "$string:app_name"

}

模块能力在 module.json5

{

  "deviceTypes": ["phone", "tablet", "2in1"],

  "pages": "$profile:main_pages",

  "requestPermissions": [

    { "name": "ohos.permission.VIBRATE" },

    { "name": "ohos.permission.INTERNET" }

  ]

}

这两处决定了后面所有技术约束:版本升级、设备素材、权限解释、页面路由和审核备注都要跟它们一致。

2. entry 模块的技术分层

本项目 entry/src/main/ets 的结构可以分成 7 类:

entryability/     应用入口和全局初始化

pages/            独立路由页面

views/            首页 Tab 内部视图

components/       可复用 ArkUI 组件

service/          业务服务、本地数据、平台能力封装

model/            类型模型

utils/            随机、断点、震动等工具函数

constants/        路由、主题等常量

这个分层的核心目标是控制依赖方向:

pages/views -> service/model/components/constants

components -> constants/model

service -> model/utils/platform kit

utils -> pure helper

不应该出现:

service -> pages

utils -> UI 状态

components -> 某个业务页面

否则后面改一个页面,很容易牵动底层服务。

3. 页面层只做编排,不直接做持久化

例如首页 HomeView.ets 负责展示入口和触发路由:

router.pushUrl({ url: Routes.WHEEL })

阅读页 Reading.ets 负责文章列表、正文和播放按钮状态:

@State articles: ReadingArticle[] = ReadingLibrary.articles();

@State selectedId: string = ReadingLibrary.defaultArticleId();

@State voicePlaying: boolean = false;

但页面不应该直接写 Preferences,不应该直接拼接语音 ReadInfo,也不应该直接维护全局转盘配置。这些都放到 service 层。

4. service 层承接业务稳定性

项目中的服务包括:

PreferencesStore.ets

SettingsService.ets

HistoryService.ets

WheelService.ets

ReadingLibrary.ets

ReadingVoiceService.ets

ScreenshotService.ets

ShareService.ets

SoundService.ets

技术价值是把不稳定点集中起来:

  • Preferences 读写异常
  • SpeechKit 初始化失败
  • 历史记录数量限制
  • 转盘默认数据恢复
  • 截图保存权限变化

页面只拿结果,不关心细节。

5. 路由必须集中管理

如果页面里到处写:

router.pushUrl({ url: 'pages/Reading' })

后期改路径会很痛苦。更好的方式是:

export class Routes {

  static readonly READING: string = 'pages/Reading';

  static readonly WHEEL: string = 'pages/Wheel';

}

页面调用:

router.pushUrl({ url: Routes.READING })

这不是形式主义,而是降低路由字符串出错概率。

6. 架构验收标准

判断这个工程结构是否健康,可以看 5 个问题:

  • 新增页面是否只需要改页面、路由和页面注册。
  • 新增持久化字段是否只需要改 service,不需要全页面搜索。
  • 新增平台能力是否能封装到独立 service。
  • 组件是否能脱离当前页面复用。
  • 上架材料里的权限、设备、版本是否能在配置里找到依据。
  • 7. 技术结论

    小应用也需要分层。不是为了复杂,而是为了后续迭代时不崩:随机工具、阅读小站、SpeechKit 朗读、多设备适配、AGC 上架都可以在同一套架构里扩展。真正的 ArkTS 工程能力,不是写一个页面,而是让页面、服务、模型、路由和配置之间的边界稳定。再帮帮孩子吧,我这个应用用代码一个一个敲出来的,帮忙到应用市场下载一个评论一下体验一哈,谢谢支持,转盘决定吧

    赞(0)
    未经允许不得转载:171主机测评 » 第一篇|HarmonyOS ArkTS 工程架构实战:从转盘决定吧拆解 entry 模块分层
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址