鸿蒙HarmonyOS开发:一次开发,多端部署(工程级)三层工程架构

文章目录

一、工程创建

1、先创建出最基本的项目工程。
  • 新建项目,选择Empty Ability,然后 Next

  • 填写项目基本信息

  • 可以看到DevEco Studio创建出的默认工程,仅包含一个的entry类型的模块。

2、新建common、features、 products 目录
  • 在根目录新建三个目录

  • 在 common 下新建一个叫 base 公共模块

    common设计为har包,新建module时选择Static Library, 内部存放全局通用的工具函数,公共配置等

  • 在 features 下新建项目需要的业务模块, 如home业务模块

    feature设计为har包,新建module时选择 Static Library, 内部存放相对独立的业务单元,比如购物车 、我的 、分类、Home ,也就是首页底部Tab切换时的四个核心业务模块

  • 把原本的 entry 模块 重构到products目录下,然后重命名为 phone

    products为产品层,里面放置phone模块,也就是入口模块,在phone中我们放置入口ability和所有页面级别的组件

二、工程结构

"一多"推荐在应用开发过程中使用如下的"三层工程结构"。

  • common(公共能力层):用于存放公共基础能力集合(如工具库、公共配置等)。

    common层不可分割,需编译成一个HAR包,其只可以被products和features依赖,不可以反向依赖。

  • features(基础特性层):用于存放基础特性集合(如应用中相对独立的各个功能的UI及业务逻辑实现等)。

    各个feature高内聚、低耦合、可定制,供产品灵活部署。不需要单独部署的feature通常编译为HAR包,供products或其它feature使用。需要单独部署的feature通常编译为Feature类型的HAP包,和products下Entry类型的HAP包进行组合部署。features层可以横向调用及依赖common层,同时可以被products层不同设备形态的HAP所依赖,但是不能反向依赖products层。

  • products(产品定制层):用于针对不同设备形态进行功能和特性集成。

    products层各个子目录各自编译为一个Entry类型的HAP包,作为应用主入口。products层不可以横向调用。

三、依赖关系

我们推荐在common目录中存放基础公共代码,features目录中存放相对独立的功能模块代码,product目录中存放完全独立的产品代码。这样在product目录中依赖features和common中的公共代码来实现功能,可以最大程度实现代码复用。

配置依赖关系可以通过修改模块中的oh-package.json5文件。

通过修改products模块中的oh-package.json5文件,使其可以使用common、features模块中的代码。

同样的,修改features模块中的oh-package.json5文件,使其可以使用common模块中的代码。

1、oh-package.json5
  • dependencies(生产依赖):声明需要在代码中import的HarmonyOS三方库(参与编译/运行阶段使用的依赖)。
  • devDependencies(开发依赖):参与项目的开发或测试阶段。
  • dynamicDependencies(动态依赖):动态依赖的HSP模块。在开发者需要动态加载HSP的时候配置使用。
2、配置ohpm包依赖

ohpm包的依赖一般包括以下三种:ohpm原生三方包、ohpm三方共享包和ohpm本地共享模块。开发者可在工程或模块下的oh-package.json5中进行配置,配置依赖的示例如下所示:

  • ohpm原生三方包依赖示例如下:

    "dependencies": {
    "eslint": "^7.32.0",
    ...
    }

  • 三方包依赖示例如下:

    "dependencies": {
    "@ohos/lottie": "^2.0.0",
    ...
    }

  • ohpm本地共享模块依赖示例如下

    "dependencies": {
    "library": "file:../library",
    ...
    }

四、引用ohpm包中的代码

模块资源如何共享?

1、定义共享资源

在common模块中新建utils文件夹,下面创建Math.ets文件,新增Add函数,用于计算并返回两个数字的和。

// common/base/src/main/ets/utils/Math.ets

复制代码
export function Add(numA:number,numB:number){
  return numA + numB
}
2、在common模块index文件中导出

在common模块中创建index.ets文件,申明需要export的类、函数的名称及在当前模块中的位置,否则其它模块无法使用。

// common/base/index.ets

复制代码
export * from './src/main/ets/utils'
3、在phone模块oh-package.json5文件中引入依赖

// products/phone/oh-package.json5

复制代码
"dependencies": {
   "base": "file:../../common/base"
 }
4、在phone模块中import和使用这些类和函数

// products/phone/src/main/ets/pages/Index.ets

复制代码
import { Add } from 'base';

@Entry
@Component
struct Index {
  build() {
    Column() {
      Text('计算两数的和:')
        .fontSize(30)
      Text('2+3='+Add(12,3))
        .fontSize(30)
    }
    .height('100%')
    .width('100%')
  }
}
5、效果展示
相关推荐
HarmonyOS小助手12 小时前
用 DevEco Studio 模拟器这些能力 没真机也能高效调测鸿蒙原生应用
harmonyos·鸿蒙·deveco studio·harmonyos next
HarmonyOS小助手9 天前
如何用DevEco Studio的ArkUI Inspector轻松搞定鸿蒙应用UI布局
harmonyos·鸿蒙·deveco studio·harmonyos next·arkui inspector
HarmonyOS小助手10 天前
DevEco Studio AI辅助开发工具两大升级功能 鸿蒙应用开发效率再提升
deveco studio·codegenie
枫叶丹41 个月前
【HarmonyOS Next之旅】DevEco Studio使用指南(十三) -> ArkTS/TS代码重构
华为·harmonyos·deveco studio·harmonyos next
枫叶丹41 个月前
【HarmonyOS Next之旅】DevEco Studio使用指南(十二)
华为·harmonyos·deveco studio·harmonyos next
枫叶丹41 个月前
【HarmonyOS Next之旅】DevEco Studio使用指南(十一)
华为·harmonyos·deveco studio·harmonyos next
枫叶丹42 个月前
【HarmonyOS Next之旅】DevEco Studio使用指南(六)
华为·harmonyos·deveco studio·harmonyos next
枫叶丹42 个月前
【HarmonyOS Next之旅】DevEco Studio使用指南(一)
华为·harmonyos·deveco studio·harmonyos next
cdblh3 个月前
【NEXT】网络编程——上传文件(不限于jpg/png/pdf/txt/doc等),或请求参数值是file类型时,调用在线服务接口
鸿蒙·deveco studio·harmonyos next
冷冷清清里风风火火是我5 个月前
【HarmonyOS开发】超详细的ArkTS入门
华为·harmonyos·arkts·鸿蒙·deveco studio