HarmonyOS鸿蒙Next中如何在项目中完美的封装复用功能?

HarmonyOS鸿蒙Next中如何在项目中完美的封装复用功能? 在实际项目开发中,会出现很多ui不同,但操作相同的功能,有些自定义弹窗、局部builder传参又与ui耦合,该怎么更好的去封装这类ui不同操作相同的功能呢

7 回复

我理解需要实现一个接口,然后不同的实际类型去实现它,利用wrapBuilder的方式吧雷同的组件封装好,传入的时候需要实现你的接口,然后在builder自己调用

这篇文章希望对你有帮助:https://developer.huawei.com/consumer/cn/blog//topic/03197120156156205

更多关于HarmonyOS鸿蒙Next中如何在项目中完美的封装复用功能?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


好的感谢,

没有最完美的封装,只有更完美的封装方法。我个人习惯是开一个 HSP 模块去封装组件,然后遇到类似的就用 if 判断优化这个组件改一改。耦合度太高了就直接复制粘贴这个组件的文件出来重新重构了。

这个可以,但我现在都是把功能抽成相应的对象管理,弹窗和模态框全用页面级弹窗,

在HarmonyOS Next中,可通过ArkTS的UI组件、自定义组件、ets模块和HAR静态共享包实现功能封装复用。使用@Builder、@Styles装饰器封装UI样式,@Extend扩展内置组件。业务逻辑可抽离为ets模块,通过export暴露接口。跨项目复用使用HAR包,配置模块的oh-package.json依赖管理。

在HarmonyOS Next中,要实现UI不同但操作相同的功能封装,关键在于将业务逻辑与UI组件解耦。以下是几种核心方案:

  1. 使用ArkTS的@Builder装饰器进行逻辑抽象 将通用操作(如网络请求、数据转换)封装在[@Builder](/user/Builder)函数中,通过参数动态注入UI差异部分。例如:

    [@Builder](/user/Builder)
    function CommonOperationBuilder(uiPart: () => void, data: SomeData) {
      // 通用操作逻辑
      fetchData(data).then(() => {
        uiPart() // 注入差异化UI
      })
    }
    
  2. 采用自定义组件+插槽机制 创建基础组件暴露slot区域承载可变UI,内部固定通用逻辑:

    [@Component](/user/Component)
    struct ReusableComponent {
      @BuilderParam dynamicUI: () => void
      
      aboutToAppear() {
        // 通用初始化逻辑
      }
      
      build() {
        Column() {
          this.dynamicUI() // 动态UI区域
          Button('通用操作').onClick(() => {
            // 封装的标准操作
          })
        }
      }
    }
    
  3. 结合状态管理实现数据驱动 使用[@Observed](/user/Observed)/@ObjectLink@Provide/@Consume管理共享状态,UI仅响应数据变化:

    [@Observed](/user/Observed)
    class OperationModel {
      // 共享数据
    }
    
    [@Component](/user/Component)
    struct UnifiedLogicComponent {
      @ObjectLink model: OperationModel
      
      // 通过model状态驱动不同UI表现
    }
    
  4. 面向接口的Service层封装 对纯操作逻辑抽离为独立Service类,UI组件通过依赖注入调用:

    class DataOperationService {
      static process(data: any) {
        // 可复用操作
      }
    }
    

实践建议

  • 优先采用@BuilderParam实现UI动态化
  • 复杂场景使用自定义组件组合方案
  • 通过Extension能力封装系统级通用操作
  • 利用componentModifier统一修改组件行为

这种分层设计能有效隔离变化点,同一套操作逻辑可适配List、Grid、弹窗等不同UI载体,提升代码可维护性。

回到顶部