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.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章