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常量定义CommonConstantsAVPlayer 状态常量、百分比常量等数据模型MSVDataModelTabs 数据模型工具类WindowUtil窗口管理、Logger日志、WidthBreakpointType断点工具、AdaptiveImmersion沉浸式算法2.2 features 层 — 基础特性层三个独立业务模块被 products 层统一调用模块功能关键文件multishortvideoadaptivevideo视频播放AdaptiveAVPlayer.ets,AdaptiveVideo.etsmultishortvideocomment评论区Comment.ets,CommentViewModel.etsmultishortvideoindividual个人作品页Individual.ets,Works.ets,IndividualByRouter.ets2.3 products 层 — 产品定制层四个 HAP 包作为独立入口各自处理设备特有的 UI 差异HAP设备入口文件导航模式default手机、平板products/default/.../Index.etsMSVTabs Navigationpc电脑products/pc/.../Index.etsSideBarContainertv智慧屏products/tv/.../Index.etsTVTabs Navigationwearable手表products/wearable/.../Index.etsMSVTabs精简版三、模块依赖配置在build-profile.json5中定义 8 个模块通过srcPath映射到各层目录{ 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 层。四、最佳实践总结按层次拆分模块common 层放通用工具features 层放业务逻辑products 层放设备差异化代码单向依赖products → features → common禁止反向依赖模块粒度控制每个 HAP 包独立编译避免不必要的依赖膨胀统一数据模型公共数据模型集中在 common 层避免跨模块重复定义