Android MVVM組成結構

amiko愛學習發表於2019-04-28

引子

漸漸的程式設計師變懶了,然後一個個框架,一個個外掛應運而生,然後讓程式設計師在越來越懶的道路上永不停止,美其名曰:減少我們對於細節的不必要關注,而將更大的經歷關注在業務層次,提高開發速度。而這種說法得到了絕大數人的贊同,結果就是:我在這邊開發框架使用的分享。好壞暫且不論,就開發效率和協同開發方面來說的確是利器,讓我們較少的關注結構和協同方面,為公司節省不少時間,也不失為居家旅行的一道良方。閒話少敘,本篇主要介紹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.

原文連結

歡迎關注我的個人部落格Enjoytoday,有更新更全的python、Kotlin、Java、Gradle開發相關部落格更新!

相關文章