HarmonyOS鸿蒙Next MVP架构

HarmonyOS鸿蒙Next MVP架构

MVP架构

1.MVC

  • Model(数据提供者)-View(控件)-Controller(活动)

  • 缺点在于:

    • activity里面的控件必须关心业务和逻辑,才知道自己怎么展示
    • 所有的逻辑都在activity中

2.MVP

  • Model-View-Presenter

  • 优势:

    • 使用 MVP 之后,Activity 就能瘦身许多了,基本上只有 FindView、SetListener 以及 Init 的代码。其他的就是对 Presenter 的调用,还有对 View接口 的实现。这种情形下阅读代码就容易多了。
    • 而且你只要看 Presenter 的接口,就能明白这个模块都有哪些业务,很快就能定位到具体代码。Activity 变得容易看懂,容易维护,以后要调整业务、删减功能也就变得简单许多。
    • 方便进行单元测试
    • 避免内存泄露:APP发生 OOM 的最大原因就是出现内存泄露造成APP的内存不够用,而造成内存泄露的两大原因之一就是 Activity泄露(Activity Leak)(另一个原因是 Bitmap泄露(Bitmap Leak)),java虚拟机对于被引用的对象由于还可能被调用所以不会回收,而MVP模式可以分离异步任务对引用
      OOM:out of memory
  • 步骤:

    • Model->提供数据的
    • View->UI逻辑(拿到Presenter层的结果进行UI更新)
    • Presenter->业务逻辑(对数据进行判断得到结果,把结果给到View层,让他进行UI更新)
  • Activity调用Present执行业务逻辑,Presenter层调用View层执行UI逻辑(所以Presenter需要以View接口作为参数设置主构造函数),具体的UI逻辑又由实现了View接口的 Activity去重写

3.MVVM

  • ViewModel 负责调用 Model(可以称之为数据源),拿到结果后,更新自身。而 View 与 ViewModel 双向绑定,所以 View 就会自动更新。 这就是 MVVM 大致的思想

  • View 与 ViewModel 双向绑定是通过 Data Binding 库和 ViewModel 组件实现的


更多关于HarmonyOS鸿蒙Next MVP架构的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

HarmonyOS Next MVP架构是基于鸿蒙系统设计的应用架构模式,主要分为Model、View、Presenter三层。Model负责数据处理,View负责UI展示,Presenter作为中间层协调Model和View的交互。该架构通过解耦视图逻辑和业务逻辑,提升代码可维护性。鸿蒙Next的MVP适配了Ability、FA/PA等核心机制,支持分布式能力调用。View层使用ArkUI声明式开发,Model层可调用鸿蒙原生API(如分布式数据管理),Presenter通过异步通信连接两端。

更多关于HarmonyOS鸿蒙Next MVP架构的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS Next中采用MVP架构确实能带来诸多优势。关于您提到的MVP实现要点,我补充几点HarmonyOS特有的注意事项:

  1. 在HarmonyOS中,View层建议使用Ability作为实现载体,通过AbilitySlice来组织UI组件。Presenter应持有View接口引用,但要注意使用WeakReference避免内存泄漏。

  2. Model层的数据获取可以使用HarmonyOS的DataAbilityHelper来访问本地/分布式数据,或通过@ohos.net.http发起网络请求。

  3. 对于Presenter的单元测试,可以利用HarmonyOS Test框架,结合Mockito等工具模拟View和Model层。

  4. 相比Android,HarmonyOS的UI更新机制有所不同,建议在View接口实现中使用TaskDispatcher进行UI线程调度。

  5. 内存管理方面,HarmonyOS的Ability生命周期与Android Activity不同,需要特别注意Presenter在Ability切换时的资源释放。

MVP架构在HarmonyOS中的核心价值不变,但具体实现需要适配鸿蒙的分布式能力特性。建议将业务逻辑尽量下沉到Presenter,保持AbilitySlice的轻量化。

回到顶部