HarmonyOS鸿蒙Next官方有没有关于项目目录怎么分层的最佳实践呀

HarmonyOS鸿蒙Next官方有没有关于项目目录怎么分层的最佳实践呀 cke_6092.png

目前我的项目结构是这样,感觉也有点怪,data/type的使用我有点不太清楚( ̄﹃ ̄)


更多关于HarmonyOS鸿蒙Next官方有没有关于项目目录怎么分层的最佳实践呀的实战教程也可以访问 https://www.itying.com/category-93-b0.html

12 回复

标准项目结构示例

AppScope
├── app.json5          # 全局配置
└── resources          # 全局资源
entry
├── src/main
│   ├── ets
│   │   ├── pages      # 页面组件(建议按功能拆分子目录)
│   │   ├── model      # 数据模型与类型定义
│   │   ├── service    # 网络请求/蓝牙等业务服务
│   │   ├── utils      # 工具类
│   │   └── constants  # 常量定义
│   └── resources      # 模块资源文件
common                 # 跨模块公共代码
├── components         # 全局公共组件
└── hooks              # 自定义ArkTS hooks

还有一些官方提供的场景解决方案,也可以从中学习

https://developer.huawei.com/consumer/cn/doc/architecture-guides/practice-auto-app-architecture-v1-0000001903742656

更多关于HarmonyOS鸿蒙Next官方有没有关于项目目录怎么分层的最佳实践呀的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


这个文档我看到过,但是具体实施的时候我不太清楚应该如何建立一个优秀标准的层级结构,

找HarmonyOS工作还需要会Flutter技术的哦,有需要Flutter教程的可以学学大地老师的教程,很不错,B站免费学的哦:https://www.bilibili.com/video/BV1S4411E7LY/?p=17

ok,感谢感谢,

第一课里面有个MVVM模式,不知道你用不用得上?
简单来说就是view:写你的component
viewmodel:中转数据
model:数据模型

找HarmonyOS工作还需要会Flutter的哦,有需要Flutter教程的可以学学大地老师的教程,很不错,B站免费学的哦:https://www.bilibili.com/video/BV1S4411E7LY/?p=17

data这些可以写在viewmodel,

感谢感谢!我觉得第一课那个例子很好,

HarmonyOS官方提供了项目目录分层的最佳实践。推荐采用模块化结构,将代码按功能划分为多个模块(如entry、feature、library等),每个模块内部按业务逻辑分层(如UI、业务逻辑、数据层)。entry模块作为主入口,feature模块封装独立功能,library模块存放公共组件或工具类。这种结构有助于代码复用、维护和团队协作。

在HarmonyOS Next应用开发中,官方推荐遵循清晰的分层架构以提升项目的可维护性和可测试性。针对你当前的结构,可以优化为以下分层方式:

推荐的核心分层(基于ArkTS/Stage模型):

  1. entry/src/main/ets/ (主模块根目录)
    • pages/feature/:存放UI页面或功能模块的UI组件。每个页面/功能一个文件夹,内含.ets文件及相关资源。
    • model/:核心业务逻辑层。
      • Data.ets:定义数据模型(classtype)。
      • Service.ets:封装网络请求、数据处理等业务逻辑。
    • viewmodel/presentation/:连接UI与数据的视图模型层,使用@State@Link@Prop等装饰器管理状态。
    • common/:公共工具类、常量、通用样式、自定义组件等。
    • utils/:纯函数工具库(如日期格式化、字符串处理)。

关于 data/type/ 的使用建议:

  • data/ 通常用于存放与数据获取、持久化相关的具体实现(如API客户端、数据库操作),可归属于model/层。
  • type/ 中定义的类型(如接口、枚举)应靠近其使用位置。全局通用类型可置于common/types.ets;模块特定类型可直接放在对应模块的model/或根目录下。

调整示例: 将你现有的 data/type/ 整合到 model/ 层,明确 pages/ 仅负责UI渲染。这样能更好地遵循“关注点分离”原则,使数据流向(UI → ViewModel → Model)更清晰。

回到顶部