Harmony NEXT:简易多层级组件架构

150 阅读3分钟

一、实现背景

纯血鸿蒙官方推荐common、feature、products三层架构,本次在官方架构上做了简易实用性实践。

为满足集团内部多个不同业务APP集成相同功能SDK兼有不同程度定制化的需求,特将公共功能下沉到SDK的中间层featureA、featureB、featureC,将针对不同APP做UI层适配的功能提到最顶层feature模块(示例中为entry模块),业务APP只需集成最顶层feature模块(示例中为entry模块)。

二、环境参数

  • OS: WINDOWS 10
  • IDE: DevEco Studio 5.0.0 Release,Build Version: 5.0.3.910, built on November 1, 2024
  • SDK: HarmonyOS 5.0.0 Release SDK, based on OpenHarmony SDK Ohos_sdk_public 5.0.0.71 (API Version 12 Release)

三、实现过程

1.基本思路

项目架构总体分为三层:product(产品定制层)、feature(基础特性层)、common(公共能力层)。

产品定制层(product):

  1. 作为应用入口,负责用户直接互动的界面。
  2. 满足不同设备或场景的个性化需求,能独立运作,同时仅依赖基础特性层和公共能力层。
  3. 可灵活地调整和扩展,从而满足各种使用场景。

基础特性层(feature):

  1. 在产品定制层之下,存放独立地功能UI和业务逻辑实现。具有高内聚、低耦合、可定制地特点,以支持产品地灵活部署
  2. 依赖下层地公共能力层为其提供通用功能和服务
  3. 可根据业务场景做相应模块化处理。例如:每个模块即应用底部导航栏中的一个tab

公共能力层(common)

  1. 用于存放公共基础能力,为上层提供稳定可靠的功能支持,提高整个应用的稳定性和可维护性
  2. 公共能力层包括但不限于以下组成:
    • 公共UI组件(统一的交互:提示、警告、加载状态...)
    • 数据管理(统一的存储和访问,包括应用数据、系统数据)
    • 外部交互(网络请求、文件I/O 、设备I/O ...)
    • 工具库(日志、字符串处理、日期处理...)
1.1 组件间源码依赖关系

项目组件源码层级关系:

image.png

项目组件间依赖关系:

image.png

公共能力层的utils属于最底层,被不同层模块所依赖使用。开发阶段,所有依赖都是源码依赖。

image.png

编译打包阶段,所有模块都是打包成独立SDK,所有依赖变成对应的har或者tgz依赖。

image.png

备注:为避免不同common或feature各自依赖一份utils.hsp,本次实践utils为集成态HSP模块。utils模块在编译后,会生成utils.har + utils-defatut.tgz。中间层依赖utils时只需依赖utils.har接口定义包,最顶层依赖utils-default.tgz实现包。

image.png

1.2 组件打包编译后关系

image.png

此时仅需对外提供一份SDK文件,即featureTop组件,组件内按需集成featureA、feaureB、featureC,然后打包featureTop.har发布给三方使用。

image.png

entryA、entryB在此处可以视为SDK demo,在对外发布前,用于调试SDK内部功能是否正常。

1.3 多模块辅助功能
  • 多模块多层级依赖在本地打包时,会出现需要手动替换har包依赖问题,此时借助脚本动态修改依赖并打包模块会显著提升(windows的powershell脚本,mac\linux的shell脚本)
  • feature模块间API调用有时候是必不可少的,可以借助router或emitter实现

四、参考资料

HarmonyOS最佳实践:集成态

HarmonyOS最佳实践:分层设计

HarmonyOS最佳实践:模块化设计