urlname
type
Post
password
SyncToConfluence
category
Android
date
Mar 31, 2023 19:46
slug
2240e00a9bad
icon
Button
catalog
summary
tags
Android
Architecture
cover
Status
BusyTime
Status 1
status
Published
带着问题学习
- MVVM 中三个字母分别代表什么?
- MVVM 中三个代表层的关系是怎么样的?
- MVVM 在 Android 中的实践应该怎么用?
- 在 Android 中,可以做到把 MVVM 对应的三层都分离开吗?
- 什么情况下使用 MVVM?
- 使用 MVVM 有什么需要注意的地方吗?
- MVVM 与 MVP 的区别在哪里?
常见的架构
- MVC
- MVP
- MVVM
- MVI
引入
- 在
MVP中,我们需要让Presenter层持有View,同时又要把Presenter给Model层持有,这种通过接口调用的方式来实现数据和事件传递的机制,虽然方便,但是数据的流动,需要我们在各层之间调用相应的回调,这无疑添加了代码量,同时也让项目中数据流动变得 难以跟踪(当然,这也是相对而言的)。
- 为此,一种新的架构模式被提出——
MVVM,在MVVM中,事件是通过数据来驱动的,各层之间,不再是需要通过接口调用的方式来互相通知了,而是通过 绑定和监听 的方式,比如在MVVM推出的时候,Android中为了这种架构模式被更好的应用,Google官方还推出了DataBinding这个 双向绑定 的组件,意在通过双向绑定的方式,实现View到ViewModel层之间的 通信 问题(这里的通信理解为:事件和数据的流动),当然,对于DataBinding的评价,众说纷芸,现在一般在开发中,是通过在ViewModel中用LiveData的方式,来给View进行监听,并在监听回调事件中进行数据获取和绑定
- 而对于
ViewModel和Model之间,Google官方是推荐通过在两者之间插入一层Repository来作为返回具体Model的媒介,因为我们的数据通常是有多个来源的,比如本地、网络等
MVVM 简介
MVVM 三个字母分别代表什么
- M:
Model,定义数据的存储格式
- V:
View,用于处理用户输入和显示,负责用户交互,同时监听ViewModel的结果
- VM:
ViewModel,连接Model和View层,接收来自View的事件,并分发给不同的Model,并将Model层的数据,封装成可以被View层监听的形式,供View层监听(不讨论DataBinding的方式)
MVVM 的作用
- 使
View层和Model层更加独立,只通过ViewModel来建立两者之间的联系
- 提高了代码的复用率、扩展性、可维护性
关系图

- 下面是对应的 mermaid 语句:
使用例子/实践
下面用
MVVM 架构模式,实现一个简单获取并显示电影列表的应用xml文件
主页面xml
RecyclerViewItem 布局xml
定义数据基本格式——Model
定义 RecyclerView.Adapter
定义数据获取层——Repository
定义中间媒介层——ViewModel
定义Activity——View
优缺点
优点
- 从上面的代码中可以看出来,
View层与Model层,彻底没有交集了,而且不再需要让ViewModel持有View,实现真正意义上的独立
- 所有的交互都是通过 ViewModel 来进行,复用率更高了
缺点
- 因为在使用过程中,要实现严格的各层隔离,所以,在学习难度和实现难度上,有一定要求
推荐/参考
- Author:CoderWdd
- URL:https://www.wuinsights.top//article/2240e00a9bad
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!
Relate Posts



