MVVM | 青训营笔记

139 阅读3分钟

MVVM | 青训营笔记

文章第一句话为“这是我参与「第四届青训营 」笔记创作活动的第4天

一、项目简介

项目是实现极简版抖音,在本次笔记中主要是记录MVC MVP MVVM框架模式

二、涉及技术&知识点

1.MVC

MVC:模型(model),视图(view),控制器(controller)

image.png view层:是最外层的东西,该层只负责展示数据;相应用户的交互行为并触发controller的逻辑;通过model中注册的事件监听model的改变并随之改变自己。 controller:相应来自view的交互,并修改model。本身并不关心view的状态而是通过修改model并由model的事件机制来触发view的刷新 model:程序所需要的数据或信息(系统中的业务逻辑部分)

2.MVP

MVP:model,Presenter,view

image.png view:通常指Activity、Fragment或者某个View控件,它含有一个Presenter成员变量。在view中实现一个接口,然后将操作转移至presenter进行实现 presenter:view和model 的桥梁。来自view 的操作请求,然后从model检索数据,最后返回到view中。 model:数据仓库,主要提供数据的存取功能。 MVP通过presenter将model和view进行解耦,也将业务逻辑从view中分离出来。

3.MVVM

MVVM:model,view,viewmodel

image.png view:只负责展示来自viewmodel的数据,该层不做任何业务逻辑,不操作处理数据,UI与数据严格分开。 viewmodel:只做业务逻辑和业务数据相关的事情(这些数据绑定的相应控件上会自动去更改UI),不做任何UI相关的事情。 model:封装数据或操作的一些逻辑,实体类的UI绑定。

三、项目过程、

ViewModel

首先要介绍jetpack,jetpack是一个开发组件工具集,主要目的是便于编写出更加简洁的代码,并简化开发过程。其中的组件大部分不依赖于Android系统版本并且具有很好的向下兼容性。 jetpack主要由基础、架构、行为、界面四部分组成。 目前官方最推荐的项目架构就是MVVM。之所以有这些项目架构是为了将大型项目进行分割,便于处理和维护。 ViewModel的一个重要作用就是可以帮助Activity分担一部分工作,它是专门存放于界面相关的数据的。除此之外ViewModel和Activity的生命周期不同,可以保证屏幕发生旋转的时候不会被重建,只有当Activity退出的时候才会跟着Activity一起销毁。

基本用法

  • 1.在app/build.gradle中添加依赖
  • 2.在MainActivity创建一个对应的MainViewModel类,然后将所有与界面相关的数据都放在ViewModel中。
  • 3.(在界面上添加什么东西都需要在activity_main.xml中进行修改)
  • 4.实现页面的逻辑在MainActivity中进行。绝对不可以直接去创建ViewModel的实例,一定要通过ViewModelProvider来获取ViewModel的实例,如果在onCreate中直接创建实例,每次执行的时候都会创建一个实例,这样就无法保留原来的数据了。具体语法规则如下
ViewModelProvider(<你的Activity或Fragment实例>).get(<你的ViewModel>::class.java)

在2中创建的MainViewModel的构造函数中没有任何参数,如何向ViewModel中传递参数? 所有的ViewModel的实例都是通过ViewModelProvider来获取的,如果要传递参数的话,需要借助ViewModelProvider.Factory就可以实现了。具体步骤

  • 修改MainViewModel中的构造函数添加参数。
  • 新建一个MainViewModelFactory类(同样也接收上边的参数),并让其实现ViewModelProvider.Factory接口。在这个接口中实现create()方法,在这里边就可以创建MainViewModel的实例了,因为create()的方法与Activity的生命周期无关。

四、总结思考

在本次笔记中对于MVVM有了一定的了解,但是还是不知道如何具体应用,需要进行项目实战。

五、引用参考

本篇笔记主要参考了文章《Android中的MVC MVP MVVM框架模式》www.jianshu.com/p/2c4919302… 以及书籍《第一行代码》