01-three-layer-architecture

01 --- HarmonyOS 多设备短视频应用的三层架构设计与实践

一、引言

在多设备应用开发中,如何高效组织代码、实现业务复用是核心挑战。本系列基于 多设备短视频(Multi-Short-Video) 项目,该系统覆盖手表、直板机、折叠屏、平板、电脑和智慧屏六种设备形态,采用 HarmonyOS 三层架构进行代码组织。

二、三层架构概览

项目采用 products → features → common 的依赖关系,自顶向下引用:

复制代码
┌──────────────────────────────────────────────────┐
│ products 层(产品定制层)                          │
│ default(手机/平板) │ pc(电脑) │ tv(智慧屏) │ wearable(手表) │
├──────────────────────────────────────────────────┤
│ features 层(基础特性层)                          │
│ multishortvideoadaptivevideo(视频播放)            │
│ multishortvideocomment(评论区)                    │
│ multishortvideoindividual(个人作品页)              │
├──────────────────────────────────────────────────┤
│ common 层(公共能力层)                            │
│ multishortvideobase(公共组件/常量/工具类/数据模型)  │
└──────────────────────────────────────────────────┘

2.1 common 层 --- 公共能力层

定义在 common/multishortvideobase 模块中,提供:

  • 公共组件 :MSVTabs、MSVTextIcon、MSVEmptyComponent
  • 常量定义 :CommonConstants(AVPlayer 状态常量、百分比常量等)
  • 数据模型 :MSVDataModel(Tabs 数据模型)
  • 工具类 :WindowUtil(窗口管理)、Logger(日志)、WidthBreakpointType(断点工具)、AdaptiveImmersion(沉浸式算法)

2.2 features 层 --- 基础特性层

三个独立业务模块,被 products 层统一调用:

模块 功能 关键文件
multishortvideoadaptivevideo 视频播放 AdaptiveAVPlayer.ets, AdaptiveVideo.ets
multishortvideocomment 评论区 Comment.ets, CommentViewModel.ets
multishortvideoindividual 个人作品页 Individual.ets, Works.ets, IndividualByRouter.ets

2.3 products 层 --- 产品定制层

四个 HAP 包作为独立入口,各自处理设备特有的 UI 差异:

HAP 设备 入口文件 导航模式
default 手机、平板 products/default/.../Index.ets MSVTabs + Navigation
pc 电脑 products/pc/.../Index.ets SideBarContainer
tv 智慧屏 products/tv/.../Index.ets TVTabs + Navigation
wearable 手表 products/wearable/.../Index.ets MSVTabs(精简版)

三、模块依赖配置

在 build-profile.json5 中定义 8 个模块,通过 srcPath 映射到各层目录:

json5 复制代码
{
  modules: [
    { name: "multishortvideodefaultsample", srcPath: "./products/default" },
    { name: "multishortvideopcsample",      srcPath: "./products/pc" },
    { name: "multishortvideotvsample",      srcPath: "./products/tv" },
    { name: "multishortvideowearablesample", srcPath: "./products/wearable" },
    { name: "multishortvideobase",           srcPath: "./common/multishortvideobase" },
    { name: "multishortvideoadaptivevideo",  srcPath: "./features/multishortvideoadaptivevideo" },
    { name: "multishortvideoindividual",     srcPath: "./features/multishortvideoindividual" },
    { name: "multishortvideocomment",        srcPath: "./features/multishortvideocomment" },
  ]
}

各模块的 oh-package.json5 中声明依赖,如 features 层依赖 common 层,products 层依赖 features 层。

四、最佳实践总结

  1. 按层次拆分模块:common 层放通用工具,features 层放业务逻辑,products 层放设备差异化代码
  2. 单向依赖:products → features → common,禁止反向依赖
  3. 模块粒度控制:每个 HAP 包独立编译,避免不必要的依赖膨胀
  4. 统一数据模型:公共数据模型集中在 common 层,避免跨模块重复定义
相关推荐
行者-全栈开发11 小时前
【鸿蒙心迹】三方库移植(二)——CMake 交叉编译与符号冲突排查实录(HarmonyOS 7.x)
harmonyos·cmake·交叉编译·三方库移植·ohos·符号冲突
梦想不只是梦与想12 小时前
鸿蒙三方库源码调试
harmonyos·断点调试·三方源码调试
用户1179104883314 小时前
AI输出满屏井号星号?hmharness把Markdown渲染成终端表格 GitHub:swsgbl/hmharness
ai编程·harmonyos
了一12316 小时前
鸿蒙ArkWeb 长截图(滚动截图)技术方案总结
harmonyos
熊猫钓鱼>_>17 小时前
平行视界兼容模式与魔法变量配置避坑【鸿蒙心迹】
运维·服务器·开发语言·笔记·华为·harmonyos·openharmony
罗四强18 小时前
第2篇:环境搭建:DevEco Studio 安装 + 第一个 Hello World
harmonyos·鸿蒙·鸿蒙系统
用户1179104883319 小时前
AI终端里复制不了代码?hmharness把鼠标还给终端 GitHub:swsgbl/hmharness
ai编程·harmonyos
贾伟康21 小时前
HarmonyOS 端侧智能体长对话压缩:摘要版本、证据索引与安全回退
harmonyos·arkts·状态恢复·上下文压缩·端侧智能体
NJPJI_Yang1 天前
鸿蒙操作系统小艺 Skill 开发实战:让应用被 HarmonyOS 7 一句话召唤
pytorch·深度学习·harmonyos
redtank20001 天前
纯血鸿蒙学习效率三件套实测:背单词艾宾浩斯曲线、时间记录与睡眠辅助
学习·华为·harmonyos