在HarmonyOS应用开发中,模块化不仅是一个设计原则,更是一种开发实践。它旨在将应用程序拆分为多个功能模块,每个功能模块负责特定的功能或特性。功能模块可以独立开发、编译和部署,也可以在不同的设备上灵活组合和调用。
应用程序包结构概念
在进行模块化设计时,需要考虑HarmonyOS的应用包结构选型,HarmonyOS的应用包结构是为了定义应用的组织方式,通过开发态、编译态、发布态阶段应用程序包的形态,了解到不同包类型对应的使用场景以及使用规则。
Ability应用组件设计
HarmonyOS应用的业务逻辑需要通过Ability组件承载,根据业务设备以及业务诉求不同,需要考虑Ability组件的选择以及设计。在多设备的背景下,应用的形态不一定是传统移动设备上的单任务单窗口形式,在一些场景下,多任务多窗口的形态可以让用户获得更好的用户体验,提升使用效率。
例如在手机设备上:
- 笔记应用,可让用户将信息从笔记的一页复制到另一页。
- 文档编辑应用,可让用户同时打开编辑多个文档,可让用户将内容从一个文档复制或移动到另一个文档。
- 导航/打车应用,可以让导航后台运行,回到主页查找新的位置信息或其它信息。
- 购物类临时客服界面,可让用户通过任务管理快速从商品浏览页切换回到客服会话界面,避免用户一层层打开查找。
- 应用支付/登录页面,可以切换至应用内其它页面查找并复制相关信息。
在大屏设备上,应用内的多个任务可以以多窗口的形式存在,用户可以并行操作应用的不同功能。
- 视频播放器应用,可让用户在观看播放内容的同时浏览其他可能感兴趣的视频列表。
- 电子邮件应用,可让用户在撰写电子邮件的同时查看收到的邮件列表。
- 地址簿应用,可让用户并排比较多个人员的联系信息。
- 阅读应用,可让用户在查阅所有标题概要后,打开多篇文章供稍后阅读。
对于这种类似独立应用一样的任务,每个任务对应一个UIAbility组件实例,并且每个任务可以单独显示一个窗口,对用户而言,可以在同个应用不同任务间切换,就像是单独的应用一样,并且在大屏设备上可以独立地移动、调整大小、显示和隐藏应用窗口。所以在进行功能设计时,需要对应用本身是否支持多任务多窗口,结合起来考虑Ability组件的设计,这影响整体工程模块化的结构。
- 对于单Ability的情况下,可以对应单窗口类型应用,或者通过多实例/指定实例实现的多任务类应用,如上述例子中的笔记、文档编辑应用,这类情况下,建议采用单HAP来承载UIAbility。
- 对于多Ability有两种情况:
- 对于多窗口类型的应用,这类应用每个窗口对应不同的功能,通过不同的UIAbility承载,如上述例子中导航/打车应用,导航功能界面和主页属于不同的功能,并且要能够作为两个任务呈现给用户,可以将该模块作为Feature类型的HAP承载相应的UIAbility组件。
- 对于应用的一些拓展功能如卡片、分享业务,其不会作为单独的任务和窗口形态运行,但是由于其功能相对来说独立,并且是由系统提供的独立ExtensionAbility来承载,从更好拆分业务来考虑,也建议通过Feature类型的HAP承载单独的ExtensionAbility组件。
应用模块化选型
应用架构是给应用业务服务的,是从技术的角度思考业务如何实现的;而工程模块化模型,是基于技术架构对代码工程所做的模块化技术选型,需要考虑技术到代码工程上如何落地,只有代码工程模型的技术选型合理了,才能在包体积、性能、产品部署等取得一个最优的综合表现。