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

带着问题学习

  1. MVVM 中三个字母分别代表什么?
  1. MVVM 中三个代表层的关系是怎么样的?
  1. MVVM 在 Android 中的实践应该怎么用?
  1. 在 Android 中,可以做到把 MVVM 对应的三层都分离开吗?
  1. 什么情况下使用 MVVM?
  1. 使用 MVVM 有什么需要注意的地方吗?
  1. MVVM 与 MVP 的区别在哪里?

常见的架构

  • MVC
  • MVP
  • MVVM
  • MVI

引入

  • MVP 中,我们需要让 Presenter 层持有 View,同时又要把 PresenterModel 层持有,这种通过接口调用的方式来实现数据和事件传递的机制,虽然方便,但是数据的流动,需要我们在各层之间调用相应的回调,这无疑添加了代码量,同时也让项目中数据流动变得 难以跟踪(当然,这也是相对而言的)。
  • 为此,一种新的架构模式被提出——MVVM,在 MVVM 中,事件是通过数据来驱动的,各层之间,不再是需要通过接口调用的方式来互相通知了,而是通过 绑定和监听 的方式,比如在 MVVM 推出的时候,Android 中为了这种架构模式被更好的应用,Google 官方还推出了 DataBinding 这个 双向绑定 的组件,意在通过双向绑定的方式,实现 ViewViewModel 层之间的 通信 问题(这里的通信理解为:事件和数据的流动),当然,对于 DataBinding 的评价,众说纷芸,现在一般在开发中,是通过在 ViewModel 中用 LiveData 的方式,来给 View 进行监听,并在监听回调事件中进行数据获取和绑定
  • 而对于 ViewModelModel 之间,Google 官方是推荐通过在两者之间插入一层 Repository 来作为返回具体 Model 的媒介,因为我们的数据通常是有多个来源的,比如本地、网络等

MVVM 简介

MVVM 三个字母分别代表什么

  • M:Model,定义数据的存储格式
  • V:View,用于处理用户输入和显示,负责用户交互,同时监听 ViewModel 的结果
  • VM:ViewModel,连接 ModelView 层,接收来自 View 的事件,并分发给不同的 Model,并将 Model 层的数据,封装成可以被 View 层监听的形式,供 View 层监听(不讨论 DataBinding 的方式)

MVVM 的作用

  • 使 View 层和 Model 层更加独立,只通过 ViewModel 来建立两者之间的联系
  • 提高了代码的复用率、扩展性、可维护性

关系图

notion image
notion image
  • 下面是对应的 mermaid 语句:

使用例子/实践

下面用 MVVM 架构模式,实现一个简单获取并显示电影列表的应用

xml文件

主页面xml

RecyclerViewItem 布局xml

定义数据基本格式——Model

定义 RecyclerView.Adapter

定义数据获取层——Repository

定义中间媒介层——ViewModel

定义Activity——View

优缺点

优点

  • 从上面的代码中可以看出来,View 层与 Model 层,彻底没有交集了,而且不再需要让 ViewModel 持有 View,实现真正意义上的独立
  • 所有的交互都是通过 ViewModel 来进行,复用率更高了

缺点

  • 因为在使用过程中,要实现严格的各层隔离,所以,在学习难度和实现难度上,有一定要求

推荐/参考

AIDL 简单使用Leetcode_72-编辑距离
Loading...