当前位置: 首页 > news >正文

重生之我在大学自学鸿蒙开发第三天-《三层架构》

  • 个人主页:VON
  • 文章所属专栏:从0开始的开源鸿蒙6.0.0
  • 个人抖音:清洒

一、前言

今天开始三层架构写代码,使得项目耦合度更低,从而实现高内聚、低耦合开发。三层架构通过模块化设计实现解耦,兼顾灵活性与扩展性,支撑“一次开发,多端部署”的核心目标。如果想要开发复杂的APP离不开三层架构,就和java项目类似的架构模式,大型项目离不开架构的帮助。废话不多说开始今天的学习。

二、实践

本章节内容参考官方链接

应用架构设计基础——三层架构-HarmonyOS应用开发快速入门-Codelabs-华为开发者联盟

官方解释:三层工程结构如下:

  • commons(公共能力层):用于存放公共基础能力集合(如工具库、公共配置等)。commons层可编译成一个或多个HAR包或HSP包,只可以被products和features依赖,不可以反向依赖。

  • features(基础特性层):用于存放基础特性集合(如应用中相对独立的各个功能的UI及业务逻辑实现等)。各个feature高内聚、低耦合、可定制,供产品灵活部署。不需要单独部署的feature通常编译为HAR包或HSP包,供products或其它feature使用。需要单独部署的feature通常编译为Feature类型的HAP包,和products下Entry类型的HAP包进行组合部署。features层可以横向调用及依赖common层,同时可以被products层不同设备形态的HAP所依赖,但是不能反向依赖products层。

  • products(产品定制层):用于针对不同设备形态进行功能和特性集成。products层各个子目录各自编译为一个Entry类型的HAP包,作为应用主入口。products层不可以横向调用。

2.1、目录拆分

这里创建的三个目录和entry同级别的,这里是目录不是模块,这里要注意点

这里再feture文件夹下创建三个模块从而实现首页、课程学习、知识地图这三个功能

创建commons层模块,与创建features层的模块一样,在commons文件夹中,创建两个模块utils和uicomponents,创建时同样选择Static Library,这两个模块存放一些公用的工具或者ui组件,在需要用到时使用

将entry模块放入products层,products层主要根据产品定制层内结构,这里需要将工程名改成default,通过右键选择refactor-> rename,选择Rename module

这里改名之前一定要先停掉项目

2.2、迁移原项目至quickstart模块

先将quickstart模块中的目录删除,方便我们去迁移项目

直接cv过去就行了

迁移成功后的页面长这样

2.3、default模块修改

这里创建一个空页面

创建页面的时候记得看一下main_pages文件有没有重复的Index

2.4、引用quickstart模块

可以看到这里启动index没什么问题证明我们迁移成功了,图片和文字没展示出来是因为预览的时候编译器无法识别rawfile中的json文件

接下来我们在default模块引用一下quickstart模块

想要引入模块一定要先导出模块,将quickstart模块中的index页面修改下,删除@Entry,重命名为quickstart然后export导出即可

这里要将pages文件夹中的quickstartPage导出,导出后才能被其他模块使用

在defaule模块中改造oh-package.json相当于引入quickstart依赖,这一文件的作用应该和java中的pom文件类似。将所有子组件打包成模块在default中引用,从而解耦。

在index中调用QuickStartPage,这里的QuickStartPage是从依赖中引入的,简单来说就是引用了quickstart模块中的内容,页面可以正常加载证明引用成功了。

三、测试

可以看到画面正常展示出来了,注意这里用的是虚拟机,如果虚拟机安装出现问题的可以看下我的上一篇,这篇文章详细讲解了我安装时候遇到的困难这里就不赘述了。

重生之我在大学自学鸿蒙开发第二天-《MVVM模式》-CSDN博客

四、源码

这里的源码和上篇文章类似,主要是对项目的拆分,明确好每个目录是干什么的就行了,这样分清楚非常方便我们后期维护工作。

http://www.dtcms.com/a/478846.html

相关文章:

  • 深入linux的审计服务auditd —— 筑梦之路
  • 杭州拱墅网站建设软文发布平台乐云seo
  • AL2系统下编译安装PSQL16.4版本
  • wrapper+ xml文件进行SQL编写
  • sql题目练习——聚合函数
  • 鄂尔多斯网站开发广东深圳龙岗区天气
  • 运用photoshop设计网站首页北京vi设计公司怎么样
  • Day61 Linux内核编译、裁剪与驱动开发基础
  • 哪个网站可以做ppt模板深圳网站设计公司费用是
  • 中国十大发布信息网站排名2021年9月重大新闻
  • VBA数据结构性能革命:Dictionary与Collection的终极对决
  • 从 0 到 1 理解读者写者问题与读写锁:操作系统并发编程入门
  • 框架--Spring
  • 贵州网站建设营销公司免费推广网站入口202
  • 10.9 了解鸿蒙生态
  • 【win32】FFmpeg 硬件解码器
  • 网站怎么做留言板块阿玛尼手表官方网站查询正品
  • Flutter 跨平台文件上传 - GetX + ImagePicker + Dio 实现
  • 实现提供了完整的 Flutter Web 文件上传解决方案
  • 黑群晖建设个人网站免费制作链接的软件
  • 网站设计毕业设计任务书网站怎样做301跳转
  • 互联网从业者的数据能力突围:从焦虑到破局的能力成长路径
  • 2025三掌柜赠书活动第三十八期 EDR逃逸的艺术:终端防御规避技术全解
  • 怎么在工商网站做实名认证企业网站的搭建流程
  • 第14讲:深入理解指针(4)——函数指针与“程序跳转术”
  • 湖北省建设网站首页公众平台网站开发哪家好
  • 重庆最有效的网站推广腾讯云搭建wordpress
  • x86、arm、rsc-v指令集架构,指令集、OS、应用3者的关系
  • 中科米堆CASAIM自动化三维测量实现注塑模具快速尺寸测量
  • ES6是什么