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

文章目录

      • 一、工程创建
        • 1、先创建出最基本的项目工程。
        • 2、新建common、features、 products 目录
      • 二、工程结构
      • 三、依赖关系
        • 1、oh-package.json5
        • 2、配置ohpm包依赖
      • 四、引用ohpm包中的代码
        • 1、定义共享资源
        • 2、在common模块index文件中导出
        • 3、在phone模块oh-package.json5文件中引入依赖
        • 4、在phone模块中import和使用这些类和函数
        • 5、效果展示

一、工程创建

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、效果展示

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/60815.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【笔记】关于git和GitHub和git bash

如何推送更新的代码到github仓库 如何在此项目已经提交在别的远程仓库的基础上更改远程仓库地址(也就是换一个远程仓库提交) 如何删除github中的一个文件 第二版 删除github上的一个仓库或者仓库里面的某个文件_github仓库删除一个文件好麻烦-CSDN博客 …

20241112-Pycharm使用托管的Anaconda的Jupyter Notebook

Pycharm使用托管的Anaconda的Jupyter Notebook 要求 不要每次使用 Pycharm 运行 Jupyter 文件时都要手动打开 Anaconda 的 Jupyter Notebook 正文 pycharm中配置好会自动安装的,有的要自己配置 Pycharm中配置 文件 ——> 设置 ——> 语言和框架……&am…

集合的介绍与比较器的应用

1.集合: 是一种容器,一种变量类型,跟数组很像 数组的缺点: A.数组的空间长度固定,一旦确定不可以更改。多了浪费,少了报错。 B.使用数组 操作数据的时候,【删除,增加】效率比较低。…

动态规划---解决多段图问题

ok 小伙伴们,我现在有点小小的红温,有点毛躁。 怎么解决多段图问题呢?求取最短路径有多种方法可取。 家人们,毫无思绪可言……………………………… 要实现动态规划,条件:子问题重叠度较高,并…

基于Spring Boot的在线性格测试系统设计与实现(源码+定制+开发)智能性格测试与用户个性分析平台、在线心理测评系统的开发、性格测试与个性数据管理系统

博主介绍: ✌我是阿龙,一名专注于Java技术领域的程序员,全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师,我在计算机毕业设计开发方面积累了丰富的经验。同时,我也是掘金、华为云、阿里云、InfoQ等平台…

cMake编译github中源码

https://github.com/gflags/gflags 记录一下防止遗忘,本次编译为gflags库 1.下载CMake-gui https://cmake.org/ 安装时,选择自动创建环境变量,安装完输入,查看是否安装成功 cmake --version 2.下载源码,解压打开文…

web——upload-labs——第四关——.htaccess文件绕过

先尝试直接上传一个普通的一句话木马 显示此文件不允许上传,这道题并没有提示不允许上传什么后缀的文件,经过尝试,基本上所有后缀能够被解析为php语句执行的文件都不能成功上传。试试正常的图片能不能上传: 我们再来试试图片马能不…

Gitcode文件历史记录查看和还原

文件历史记录 文件历史记录用于记录代码文件的更改历史,它允许用户查看文件的不同版本,了解每个版本的修改内容、作者和提交消息。这对于跟踪文件演进、恢复错误更改、审查代码以及了解项目进展都非常有用。 文件历史记录功能提供了以下核心功能&#…

前端神经网络入门(二):如何利用 WebGPU 进行数值计算,实现大规模数据的计算加速?- 边读边按下F12跑代码吧

在 Web 应用开发中,JavaScript 是前端开发者们最常用的语言。然而,当面对大规模数据处理和计算任务时,JavaScript 在浏览器中的执行往往会受到诸多性能瓶颈的限制。幸运的是,WebGPU 的出现,为我们提供了在前端实现高性…

新手教学系列——善用 VSCode 工作区,让开发更高效

引言 作为一名开发者,你是否曾经在项目中频繁地切换不同文件夹,打开无数个 VSCode 窗口?特别是当你同时参与多个项目或者处理多个模块时,这种情况更是家常便饭。很快,你的任务栏上挤满了 VSCode 的小图标,切换起来手忙脚乱,工作效率直线下降。这时候,你可能会问:“有…

Oracle故障处理:ora-12514 与 ora-28547

目录 项目场景 问题分析 问题总结 项目场景 现场同事求助说:有个刚刚部署在Windows上的Oracle11gR2数据库(单机单实例),使用PLSQL工具连接不上。帮忙查看后,发现未装Oracle client,指导其安装完Oracle客…

【miniMax开放平台-注册安全分析报告-无验证方式导致安全隐患】

前言 由于网站注册入口容易被机器执行自动化程序攻击,存在如下风险: 暴力破解密码,造成用户信息泄露,不符合国家等级保护的要求。短信盗刷带来的拒绝服务风险 ,造成用户无法登陆、注册,大量收到垃圾短信的…

26-ES集群搭建、身份认证配置

虚机搭建 添加es用户 elasticsearch 默认不允许root用户启动,所以需要创建es用户 useradd elasticsearch passwd elasticsearch 解压安装包 #解压es tar -xvzf elasticsearch-7.14.2-linux-x86_64.tar.gz 将文件夹赋予es用户权限 #将文件夹赋予es用户权限 sud…

OpenHarmony的公共事件

OpenHarmony的公共事件 公共事件简介 CES(Common Event Service,公共事件服务)为应用程序提供订阅、发布、退订公共事件的能力。 公共事件分类 公共事件从系统角度可分为:系统公共事件和自定义公共事件。 系统公共事件&#…

【AlphaFold3】开源本地的安装及使用

文章目录 安装安装DockerInstalling Docker on Host启用Rootless Docker 安装 GPU 支持安装 NVIDIA 驱动程序安装 NVIDIA 对 Docker 的支持 获取 AlphaFold 3 源代码获取基因数据库获取模型参数构建将运行 AlphaFold 3 的 Docker 容器 参考 AlphaFold3: https://github.com/goo…

npm list -g --depth=0(用来列出全局安装的所有 npm 软件包而不显示它们的依赖项)

您提供的命令 npm list -g --depth0 是在 Node Package Manager (npm) 的上下文中使用的,用来列出全局安装的所有 npm 软件包而不显示它们的依赖项。 这是它的运作方式: npm list -g --depth0-g: 指定列表应包括全局安装的软件包。--depth0: 限制树形结…

Spring Boot框架:电商系统的技术革新

4 系统设计 网上商城系统的设计方案比如功能框架的设计,比如数据库的设计的好坏也就决定了该系统在开发层面是否高效,以及在系统维护层面是否容易维护和升级,因为在系统实现阶段是需要考虑用户的所有需求,要是在设计阶段没有经过全…

【数据分享】中国对外投资合作发展报告(2013-2023)

数据介绍 绪 论............................................................................................................................. 1 对外投资合作高质量发展迈出新步伐................................................................... 2 第一篇 发…

【深度学习】LSTM、BiLSTM详解

文章目录 1. LSTM简介:2. LSTM结构图:3. 单层LSTM详解4. 双层LSTM详解5. BiLSTM6. Pytorch实现LSTM示例7. nn.LSTM参数详解 1. LSTM简介: LSTM是一种循环神经网络,它可以处理和预测时间序列中间隔和延迟相对较长的重要事件。LSTM通…

【云原生系列--Longhorn的部署】

Longhorn部署手册 1.部署longhorn longhorn架构图: 1.1部署环境要求 kubernetes版本要大于v1.21 每个节点都必须装open-iscsi ,Longhorn依赖于 iscsiadm主机为 Kubernetes 提供持久卷。 apt-get install -y open-iscsiRWX 支持要求每个节点都安装 N…