「Android 架构」—— MVVM 详解

作者 : 开心源码 本文共2100个字,预计阅读时间需要6分钟 发布时间: 2022-05-12 共164人阅读

前言

只需你掌握了基础知识,要想构建一个完整的 Android App 并不难,但是想要写出一个可维护的 App 就是另一回事了,这时候就必需让你自己的代码足够健壮,就需要避免把所有业务逻辑代码都放在 Activity、Fragment,或者者是创立多个比较小的只有单一功能的 class。

那么应该怎样做呢?—— 使用 架构模式!MVC、MVP、MVVM、…任何一种都要比没有架构设计的流水式代码好得多,MVVM 是 Android 开发最好的架构选择之一。Google 官方也非常支持和鼓励开发者使用这一架构模式。

本教程将为你讲明白究竟什么是 MVVM,尽管我也不喜欢理论,但有时候在实际操作之前先理解它非常重要,所以请务必耐心看完。

Model-View-ViewModel 的意义

关注点分离准则是架构的终极准则,并且每个设计模式都在尽其所能的实现这一点。在 MVVM 中,有 3 个固定部分有助于实现关注点分离:modelsviewsview models。你还可以增加一个 repository ,作为所有数据的单一真实数据来源 —— 后面详细详情。

image

View

在 MVVM 中, View 不是指 TextViewRecyclerView 这少量控件,而是 app 中负责解决客户界面显示和交互的一个部分,换一种说法就是,View 负责执行一切 Activity 或者 Fragment 能做的操作。

这里有一个重要的概念:View 仅仅解决客户的即时交互。什么意思呢?不要把业务逻辑比方数据库操作相关的业务放在 Activities 或者 Fragments 中。它只负责显示少量东西在屏幕上(比方从 ViewModels 拿到的少量数据),执行 Android 特定操作并将客户交互事件(点击、滑动等)发送到各自的 ViewModel。

ViewModel

ViewModel 就像 View 和业务逻辑之间的粘合剂,它负责从 Repository 获取数据并提供给 View。

当你查看上面的架构模型图时,你可能想知道 View 如何获取它应该显示的所有数据。如图,箭头仅指向一个方向 -> ViewModel。你可能注意到箭头是单向的,这意味着 ViewModel 没有任何关于哪些 View 正在使用它的线索。尽管这能减少类之间的纠缠,但是 ViewModel 还是需要告诉 View 需要显示哪些数据。

这里的做法就是使 ViewModel 中的适当数据可观察,通过这样做,当数据升级时,我们就无需直接从 ViewModel 去升级 View。View 已经持有了 ViewModel 的引用,因而它可以方便的观察 ViewModel 公开的少量数据。当数据发生变化时,所有观察它的 View 都将收到相应的更改通知(onChange() 被回调)。

image

上述一系列操作可以通过 LiveData 来完成,LiveData 是一个方便的生命周期感知库,用于创立可观察对象。它的一个优点就是当 Activity 或者 Fragment 已经销毁时,它就不会自动向其发送通知了,这样就无需我们自己去管理生命周期了。

Model

Model 就是你放置所有特定业务代码的地方,尽管从技术上讲,ViewModel 和 Model 之间存在一个以 Repository 形式存在的中间步骤,你可以将 Repository 中的所有内容视为远离客户界面的一组类。它负责从本地数据库或者网络中获取数据并操作应用中的数据。

Repository 具备本地存储和服务器之间的中介这么一个特殊角色,你可以在此检查能否应该在本地缓存远程数据等。Repository 也是 ViewModel 的单一真实数据来源。也就是说,当 ViewModel 想取少量数据,它就从 Repository 拿,而后由 Repository 决定下一步该做什么,对于 ViewModel 来说,数据可以从本地、网络、缓存、…任何地方拿,它并不关心这些 —— 这是 Repository 应该解决的业务逻辑。

MVVM 组件的连接性

View 不仅观察 ViewModel 中的数据,而且 ViewModel 还观察 Repository 中的数据,后者又观察来自本地数据库和远程数据源的数据。

为了全面考虑这一点,你可以通过以下方式考虑 Model,View,ViewModel,Repository 和其余类之间的联络。

遍历层次结构时,上层类直接引用其子级。另一方面,子级不持有其父级引用。子级只允许通过 LiveData 或者任何其余库观察少量数据。

为了便于了解,请看下面的箭头图。我想在开始时为你省去不必要的混乱,这就是为什么那些可观察到的箭头没有出现在详情 MVVM 的第一个图表中。

image

这里要提到的最后一件重要事情是你应该始终遵守上面的参考树图,例如,不要让你的 ViewModel 绕过 Repository 直接从数据库取数据!一切都有它的目的:使代码板块化,易于维护和阅读等。你今后读代码的时间永远大于写代码,所以代码的可读性要放在第一位,不要懒得去抽离和构建代码,以后的你会感谢当初的自己的。

总结

在这篇文章中,你理解了MVVM架构模式背后的概念,再加上你已经掌握的基础开发知识,你可以使用这种模式构建一个真正的可维护的应用程序了,还等什么?开始行动吧??

说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » 「Android 架构」—— MVVM 详解

发表回复