Android架构之MVVM详解

https://juejin.cn/post/6844903976240939021

一、MVVM是什么?

MVVM分为Model,View,ViewModel 三个部分

Model:数据层,包含数据实体和对数据实体的操作,和MVP的model没有区别
View:界面层,对应于Activity,XML,负责数据显示以及用户交互。相比MVP的view,这里面的view视图数据一般是在xml中使用DataBinding进来双向绑定数据的。
ViewModel:关联层,作为中间桥梁 去通知model数据层处理数据业务,并将结果回调给 UI 层处理 UI 逻辑。ViewModel中只有activity持有vm引用,vm是不持有view的引用的,所以vm的构造方法中不能传入视图相关的对象。所以重点在于怎么通知view,可以通过观察者回调的方式。但是现在一般是结合Jetpack来进行view的更新的。

具体的视图关系如下图所示:


image.png

二、MVP、MVVM和Jetpack MVVM的区别

简单来说,MVP 是基于适配器模式的实现,它是在 MVC 模式泛滥的背景下,为了遵循 依赖倒置原则 以便能够随时替换 V 和 M 的实现。 也即,本质上它并没有解决代码耦合的问题(从前 UI 逻辑在 视图控制器中写,现在搬到了 Presenter 中写而已),它的存在只是为了 面向接口编程 以实现依赖倒置。抛开 MVC 的背景,就无法谈论 MVP 存在的意义。

MVVM 的本质是数据驱动编程,它从本质上解决了代码耦合、实现了关注点分离:让 ViewModel 作为中间桥梁 去通知数据层处理数据业务,并将结果回调给 UI 层处理 UI 逻辑。

Jetpack MVVM 是在 MVVM 模式的基础上 加入了 软件工程安全 和 用户体验优化 的设计。

例如 Jetpack LifeCycle 能在背后妥善处理 视图控制器生命周期的 Null 安全问题,而 Jetpack ViewModel 能分治视图状态的托管,使得 UI 发生重建时 无需重新向后台请求数据,这大幅节省了开销,让重建时的视图加载较以往 更快和更省电。

综上,MVP 和 MVVM 二者之间没有任何关系。MVP 是对 MVC 的升级,而 MVVM 是现代化软件开发模式的范例

你可能感兴趣的:(Android架构之MVVM详解)