鸿蒙应用开发之架构分层与设计

 

本文讲解如何基于稳健与通用完成大参林医药集团鸿蒙应用脚手架的架构设计。

背景

在2024年1月18日的华为“鸿蒙生态千帆启航”发布会中,华为宣布鸿蒙星河版(HarmonyOS NEXT)预计在2024年Q2发布开发者Beta版,Q4发布面向消费者的商用版本。并且该系统将只能安装为鸿蒙开发的原生应用,而不再兼容安卓应用。

本人公司的参易好app与大参林百科app用户中华为手机群体占比较大,具体多少是公司机密,在这里就不透露了。

为预防从华为发布 HarmonyOS NEXT 后,存在过渡期短的问题,需要从2024Q2开始进行公司两个app的鸿蒙化实现,期望于2024年9月30日前完成。

架构设计

时间紧,任务重,因此必须要给出一个稳健通用的架构,可以让团队成员赶在2024年9月30日前完成两个鸿蒙应用。我们梳理出以下几点架构的目标

  • 可以提高整个应用的可维护性、质量和稳健性。

  • 允许应用扩缩。尽可能减少代码冲突,使更多人和更多团队可以为同一代码库做贡献。

  • 有助于新手上手。使项目保持一致性,让团队中的新成员可以快速上手,并在更短时间内提高效率。

  • 架构需要兼容公司之前的h5、uniapp小程序应用。

明确了目标后,再结合鸿蒙官方模块化设计最佳实践,我们整理出下面的鸿蒙应用架构图

鸿蒙应用架构全景图

先看公共能力层,我们由于要实现两个鸿蒙应用,梳理总结出如网络请求基础框架、通用组件、埋点能力等19项基础能力。这部分能力是两个应用通用而且不会因为业务改变而频繁变化的,因此会将公共能力层分能力模块封装成鸿蒙中的har远程库。

然后基于公共能力层的各个模块,实现业务划分出来的业务特性层,如登录模块、注册模块、商城模块等,这部分将会由业务主导,ui也会频繁变化,因此实现在业务特性层。

最后是业务产品层,这个就是根据应用来选择业务特性层的模块来组合拼装成需要打包的鸿蒙应用,如我司的两个应用的登录能力是一致的,因此会直接使用业务特性层中的登录模块。

这样设计的架构达到了最大效率重用与拓展的能力。

下面具体来讲解一下架构中的两个重点设计原则。

关注点分离的模块化

关注点分离的模块化是软件设计中的一种重要思想,尤其在鸿蒙应用的架构中,它能帮助开发团队更好地组织代码,提升应用的可维护性和扩展性。关注点分离指的是将代码根据不同的功能或职责进行划分,使每个模块专注于完成一种任务,从而减少模块之间的耦合,提升开发效率。

那么我们如何实现关注点分离的模块化呢?

  • 使用接口和依赖注入:每个模块应当通过接口或服务提供方法,避免直接依赖具体实现。可以使用依赖注入或服务定位模式,将模块通过接口注入到业务逻辑或 UI 层,使模块间依赖解耦。
  • 定义清晰的模块边界:每个模块的职责要单一且清晰,避免出现跨模块的逻辑。例如,UI 模块不应该包含数据存储的逻辑,而只需调用数据管理模块提供的接口获取数据。
  • 模块化配置管理:在应用配置中,为每个模块独立设置参数和依赖,例如通过配置文件管理网络模块的 API 地址、用户模块的授权策略等,使配置易于管理和维护。

简单总结就是,同层模块之间不应该互相依赖,也不应该出现循环依赖的情况。

可重用的公共能力基础层

公共能力基础层承载着整个应用系统的底层逻辑和通用功能,确保多个应用、模块或功能可以复用统一的服务和组件,达到代码解耦、提高开发效率的目的。需要先明确公共能力基础层的特性

  • 通用性:确保基础层提供的服务在多个应用和模块中均可复用。
  • 低耦合性:优先通过接口,确保公共能力基础层与上层业务解耦,不依赖于具体业务实现。
  • 便于维护:模块化设计使得各个功能相互独立,便于团队维护和升级。

基于以上特性,同时结合上面的关注点分离的模块化设计原则,我们拆解出来网络请求基础框架、本地数据处理、文件存储、通用组件、埋点上报等19个基础模块。然后将基础模块封装成har远程库,让业务层基于版本号实现依赖。关于具体如何封装,后续会有文章继续讲解。

总结

从公司具体业务场景出发,结合鸿蒙官方模块化设计最佳实践 , 我们设计出上述的三个层次而且关注点分离的架构,极大提高开发效率,确保团队能够在既定时间内交付高质量的应用产品。

但由于项目机密,无法共享代码给大家,希望大家能从文章里面理解,也希望大家可以共同探讨,谢谢。