Android MVVM组成结构

引子

渐渐的程序员变懒了,然后一个个框架,一个个插件应运而生,然后让程序员在越来越懒的道路上永不停止,美其名曰:减少我们对于细节的不必要关注,而将更大的经历关注在业务层次,提高开发速度。而这种说法得到了绝大数人的赞同,结果就是:我在这边开发框架使用的分享。好坏暂且不论,就开发效率和协同开发方面来说的确是利器,让我们较少的关注结构和协同方面,为公司节省不少时间,也不失为居家旅行的一道良方。闲话少叙,本篇主要介绍Google推出的 Android Architecture Component 中的 MVVM-LiveData-kotlin 。若说的不对的地方,还望各位看官指出纠正。

介绍

MVVM已经出来了较长一段时间了,而这个模式则是将 MVVMkotlin 两个结合而形成,显得十分合适,kotlin本身的简短、lambda写法配合LiveData的观察者模式使得代码的结构和层次更加鲜明。MVVM-LiveData_kotlin这一结构包含了多个部分内容,如下就该结构各个部分进行简要的分析、并将Retrofit与LiveData进行配对实现网络请求(替代RxJava+Retrofit).

本篇不免落入俗套的介绍下MVVM的背景介绍之中。

MVVM 结构

首先谈谈什么是mvvm,android开发中有关于界面和数据的绑定这块一直都是研究的重点。随着APP的界面越来越多样、业务变得越来越复杂,一个界面上所需要处理的数据也就越来越多,这时候传统的findView方式显然使得开发者产生不满,所以有butterknife这样的注解绑定控件的出现,而业务与界面状态的不断变化处理渐渐冗长,就导致了Databinding这类数据绑定的出现,而MVVM就是基于databinding这类绑定式的APP开发框架。其结构如下:

mvvm框架

Architecture Component

MVVM 的使用是Google 推出的 Android Architecture Component 实现,其中所包含的组件如下:

  • ROOM
    Room 是google 对于本地数据库的一个封装,通过注解实现的一个本地数据库的创建管理组件,如下为一个Room使用的案例:
@Database(entities = arrayOf(Task::class), version = 1)
abstract class ToDoDatabase : RoomDatabase() {

    abstract fun taskDao(): TasksDao

    companion object {

        private var INSTANCE: ToDoDatabase? = null

        private val lock = Any()

        fun getInstance(context: Context): ToDoDatabase {
            synchronized(lock) {
                if (INSTANCE == null) {
                    INSTANCE = Room.databaseBuilder(context.applicationContext,
                            ToDoDatabase::class.java, "Tasks.db")
                            .build()
                }
                return INSTANCE!!
            }
        }
    }

}

  • Lifecycle-aware components
    Lifecycle-aware是Google用于管理生命周期的一个组件.用于处理MVVM中数据绑定的状态变化,让我们不需要关心View的状态改变,MVVM 中的View层 FragmentActivity、androidx.fragment.app.Fragment 组件实现了该组件。

  • ViewModels
    MVVM框架的VM层,用于实现与view的双向绑定,并操控model的一个组件.viewmodel主要是用于将MVVM的界面与逻辑进行解耦分离,便于代码的后期维护,其实现如下:


class BaseViewModel : ViewModel() {

 // viewmodel实现层

}

  • LiveData
    Google开发的一个观察者模式的组件,可以替代RxJava的部分功能,是一个类似RxJava的组件。

  • Databinding
    Databinding 是用于界面与数据的绑定使用的,先已在Andorid Studio内置,可直接通过在build.gradle设置如下代码开启:


android {

  ...
  dataBinding {
    enabled = true
 }
}

有了上述的组件就可一一开始组件MVVM.

展开阅读全文

仿Vue手把手带大家从零开始搭建一款MVVM框架

11-08
课程介绍 本套课程,大喵将带着大家手把手,编辑每一行代码,使用原生Javascipt及ES6的一些新特性,仿照目前国内非常流行的Vue框架的源码,开发构建一个属于你们自己的MVVM框架。 让大家能够很清晰的学习及掌握,模板编译,数据绑定,响应式,文档碎片,观察者模式,发布订阅模式等等,这些Vue的核心知识点,都是怎么回事,它们之间有哪些关联,是如何进行双向数据绑定的等等。 在使用vue2.x的核心Object.defineProperty构建完成框架后,大喵也会使用Vue3.0引入的数据劫持的Proxy新特性,来改造我们的MVVM框架,提升我们的框架性能。 最终,大喵会手把手带着大家,从0开始配置webpack.config.js配置文件以及引入babel-loader,配置.babelrc文件,转换我们JS文件中的的ES6语法,最终压缩输出我们的MVVM框架库文件。 课程目录 01 手把手搭建MVVM框架 课程介绍、02 文件结构及基础类创建、03 入口类DamiaoMvvm的实现、04 模板编译、05 元素节点解析编译、06 v-model 数据绑定逻辑梳理、07 v-model 数据绑定实现、08 模板文本编译逻辑梳理、09 模板文本渲染绑定、10 观察者Wather逻辑梳理、11 Wather 逻辑实现、12 Object.defineProperty()、13 defineProperty 小案例、14 observer数据劫持梳理、15 defineProperty数据劫持实现、16 发布订阅类实现、17 Proxy 介绍与概述、18 使用Proxy改造MVVM框架、19 使用Proxy实现响应式、20 webpack 打包配置、21 babel 配置及文件输出、22 Mvvm Proxy 框架打包、23 Mvvm 框架搭建课程总结 MVVM框架介绍 MVVM是 Model-View-ViewModel 的缩写。mvvm是一种设计思想。Model 层代表数据模型,也可以在Model中定义数据修改和操作的业务逻辑;View 代表UI 组件,它负责将数据模型转化成UI 展现出来,ViewModel 是一个同步View 和 Model的对象。 在MVVM架构模式下,View 和 Model 之间并没有直接的联系,而是通过ViewModel进行交互,Model 和 ViewModel 之间的交互是双向的, 因此View 数据的变化会同步到Model中,而Model 数据的变化也会立即反应到View 上。 ViewModel 通过双向数据绑定把 View 层和 Model 层连接了起来,而View 和 Model 之间的同步工作完全是自动的,无需人为干涉,因此开发者只需关注业务逻辑,不需要手动操作DOM, 不需要关注数据状态的同步问题,复杂的数据状态维护完全由 MVVM 来统一管理。
©️2020 CSDN 皮肤主题: 大白 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值