前言
- 熟悉Android开发或前端的同学都大致了解MVVM模式,由最初的架构 MVC->MVP->MVVM->MVI 推演而来,经过架构迭代之后,代码解耦,可读性强,数据流驱动等等优势成为了主流的开发架构。那我们来看看在HarmonyOS 中的MVVM的架构又是怎样的呢?
简单回顾MVC、MVP
- MVC架构中,Model数据模型,处理一下基本的数据逻辑;Controller是业务的主要承载者,几乎所有的业务逻辑都在Controller中进行编写,而Controller一般都在View层上写,密不可分。
-
一句话点评:对于庞大的业务而言,一个View页面能达上千行代码,太臃肿
-
MVP中,View层接收到事件后调用到业务层处理,业务层调用数据层处理数据,数据层处理数据后回调给业务层,业务层再回调给视图层更新页面。(数据层已不再持有视图层,他们之间通过业务层(Presenter)交互,具体使用接口实现,使数据层和视图层解耦.
- 一句话点评:当业务复杂的时候,凌乱的Presenter,到处飞,一个View有十几种状态,但好在,它解耦啊,文件层级清晰。
MVVM
- MVVM(Model-View-ViewModel)架构是用于构建用户界面的架构模式,它将UI和业务逻辑分离。
Android的MVVM
- 简单看看Android的MVVM ,Android的MVVM架构得益于Jetpack库推出的组件如:DataBinding、Lifecycle、livedata、ViewModel.跟View自动解绑,放心、直观的生命周期控制,数据回调处理方便,各种控制状态都能很好的处理。
HarmonyOS MVVM
-
Model层:存储数据和相关逻辑的模型。它表示组件或其他相关业务逻辑之间传输的数据。Model是对原始数据的进一步处理。
-
View层:在ArkUI中通常是@Component装饰组件渲染的UI。
-
ViewModel层:在ArkUI中,ViewModel是存储在自定义组件的状态变量、LocalStorage和AppStorage中的数据。
-
自定义组件通过执行其build()方法或者@Builder装饰的方法来渲染UI,即ViewModel可以渲染View。 View可以通过相应event handler来改变ViewModel,即事件驱动ViewModel的改变,另外ViewModel提供了@Watch回调方法用于监听状态数据的改变。 在ViewModel被改变时,需要同步回Model层,这样才能保证ViewModel和Model的一致性,即应用自身数据的一致性。 ViewModel结构设计应始终为了适配自定义组件的构建和更新,这也是将Model和ViewModel分开的原因。 目前很多关于UI构造和更新的问题,都是由于ViewModel的设计并没有很好的支持自定义组件的渲染,或者试图去让自定义组件强行适配Model层,而中间没有用ViewModel来进行分离。 例如,一个应用程序直接将SQL数据库中的数据读入内存,这种数据模型不能很好的直接适配自定义组件的渲染,所以在应用程序开发中需要适配ViewModel层。
理解&实战
-
文字我都懂,但是组合在一起怎么就读不懂了呢?相信你也有这个烦恼。
-
最主要是看ViewModel.
-
首先看HarmonyOS 官房的图解还是比Android的简单,基本的理解就是靠ViewModel 去刷新 View视图,那一句话讲完,ViewModel 是什么? 那就是状态变量,例如@State ,@Provide,@Link等等。
-
层级
-
相关状态
- 事件驱动
- 事件回传渲染
- 简单理解:基本是按官房定义走,Model层写处理回调函数,同步ViewModel ,刷新View。
- Demo 说明 :进入闪屏页,倒计时进入主页面,主页面首次加载进行骨架屏展示,等待数据从网络中获取,驱动显示页面。
效果展示
静态效果
闪屏页 | 骨架屏 | 主页 | 主页 |
---|---|---|---|
动态效果
最后
烦请大佬们,多多赐教,Gitee地址 gitee.com/HoCham/MVVM…