Android MVVM架构搭建

Android MVVM架构搭建,第1张

概述以前项目中虽然也使用MVVM架构,但由于整体框架不是我自己搭建的,导致我对于MVVM架构的整体还是很不熟悉,所以这次就自己搭建并实现一次MVVM架构。MVVM架构使用的组件有ViewModel、LiveData、ViewBinding/DataBinding等,这些组件都是Jetpack库中的组件。在使用ViewModel之前要先

以前项目中虽然也使用MVVM架构,但由于整体框架不是我自己搭建的,导致我对于MVVM架构的整体还是很不熟悉,所以这次就自己搭建并实现一次MVVM架构。

MVVM架构使用的组件有viewmodel、liveData、VIEwBinding/DataBinding等,这些组件都是Jetpack库中的组件。在使用viewmodel之前要先建立四个类别的概念:

viewmodelProcider.Factory:Factory用来生成viewmodelviewmodel:持有liveData,从Repository获取数据,并向VIEw提供数据Repository:获取和处理数据,可以从网络、数据库或其他API获取并处理数据liveData:具有生命周期感知能力的可观察的数据存储器,通知VIEw展示数据

下图展示了MVVM架构示意图,以及相关组件在其中的作用。

了解了MVVM的基本架构和其中各个组件的作用,可以开始代码实现了。我做这个项目的初衷是因为最近在整理收集AndroID常用的开源库,为了更方便的展示所实现的一个应用。本项目使用Bmob直接作为后台数据库,接入Bmob SDK后调用API可以直接获取数据,以此来模拟后台接口。同时本项目使用Koin作为依赖注入的框架,省去初始化viewmodel、Repository、viewmodelProcider.Factory的过程。

先贴上项目目录,需要关注的是高亮显示的文件(使用Koin省去了Factory类的实现):

viewmodel类:

实现Homeviewmodel类,需要继承继承自viewmodel(),作为HomeFragment的viewmodel。Homeviewmodel类的构造参数是BmobRepository,类中有一个liveData变量用来承载数据,一个函数getAllRecommendlibrary()获取开源库数据,函数实现是repository在协程中获取云数据库中的数据:

class Homeviewmodel(private val repository: BmobRepository) : viewmodel() {    var libraryRecommendData = mutablelivedata<MutableList<AndroIDlibrary>>()    fun getAllRecommendlibrary() {        viewmodelScope.launch {            repository.getAllRecommendlibrary(libraryRecommendData)        }    }}

Repository类:

实现BmobRepository类,作为Homeviewmodel的数据提供方。BmobRepository类中有一个挂起函数getAllRecommendlibrary(libraryRecommendData: mutablelivedata<MutableList>)用来获取云数据库中的数据,函数的参数是liveData,在获取数据后,利用setValue通知VIEw展示数据。

class BmobRepository {    /**     * 获取Bmob中所有推荐开源项目     */    suspend fun getAllRecommendlibrary(libraryRecommendData: mutablelivedata<MutableList<AndroIDlibrary>>) {        return withContext(dispatchers.IO) {            val bombquery: Bmobquery<AndroIDlibrary> = Bmobquery()            bombquery.findobjects(object : FindListener<AndroIDlibrary>() {                overrIDe fun done(data: MutableList<AndroIDlibrary>?, ex: BmobException?) {                    if (ex == null) {                        Timber.d("Bmob find success")                        libraryRecommendData.value = data!!                    } else {                        Timber.d("Bmob exception $ex")                    }                }            })        }    }}

Koin初始化:

Koin的初始化分为两步:

定义viewmodel,告诉Kioin从哪里找到viewmodel和Repository并自动生成,这里我选择直接写在BaseApplication中,需要注意的是需要定义在最外层,即和Classt同级:

在Application的onCreate()函数中初始化Koin:

class BaseApplication : Application() {    overrIDe fun onCreate() {        super.onCreate()        //初始化Bmob        Bmob.initialize(this, Constant.BMOB_APP_ID)        //初始化Timber        if (BuildConfig.DEBUG) {            Timber.plant(Timber.DeBUGTree())        }		//第二步:        startKoin {            //AndroID context            androIDContext(this@BaseApplication)            //modules            val List = listof(myModule, repoModel)            modules(List)        }    }}//第一步://定义一个myModule作为viewmodelval myModule = module {    viewmodel { Homeviewmodel(get()) }}//定义一个repoModuleval repoModel = module {    single { BmobRepository() }}

Fragment类实现:

实现HomeFragment类作为视图层,其中分为两步:

变量homeviewmodel作为viewmodel获取数据,使用Koin后的初始化方式十分简单

private val homeviewmodel: Homeviewmodel by viewmodel()//懒加载初始化

liveData注册监听viewmodel中的数据改变,并实现获取数据后的 *** 作

    private fun initRegister() {        //liveData在视图层中注册监听后,在viewmodel中的数据改变时可以持续收到数据        homeviewmodel.libraryRecommendData.observe(vIEwlifecycleOwner, {            Timber.d("t $it")            (binding.rvAndroIDlibrary.adapter as AndroIDlibraryAdapter).apply {                data = it                notifyDataSetChanged()            }        })    }

viewmodel调用函数通知Repository去查询数据:

    overrIDe fun onResume() {        super.onResume()        homeviewmodel.getAllRecommendlibrary()    }

自此,一个MVVM架构的应用搭建完成,第一次独立的搭建MVVM架构之后,对于MVVM架构的理解加深了不少,对于JetPack库中的组件和其它开源库也有了新的认识,此外MVVM架构还经常和Retrofit、RxJava等开源库配合使用,希望以后有机会可以再进行实践 *** 作!!

参考文章:Android MVVM 架構-使用 ViewModel、LiveData、Factory 以及 Repository

本项目源代码android_all_star_app

本项目使用开源组件库:koin、timber、permissionx、BaseRecyclerVIEwAdapterHelper

总结

以上是内存溢出为你收集整理的Android MVVM架构搭建全部内容,希望文章能够帮你解决Android MVVM架构搭建所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1024562.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存