引子
漸漸的程式設計師變懶了,然後一個個框架,一個個外掛應運而生,然後讓程式設計師在越來越懶的道路上永不停止,美其名曰:減少我們對於細節的不必要關注,而將更大的經歷關注在業務層次,提高開發速度。而這種說法得到了絕大數人的贊同,結果就是:我在這邊開發框架使用的分享。好壞暫且不論,就開發效率和協同開發方面來說的確是利器,讓我們較少的關注結構和協同方面,為公司節省不少時間,也不失為居家旅行的一道良方。閒話少敘,本篇主要介紹Google推出的 Android Architecture Component 中的 MVVM-LiveData-kotlin 。若說的不對的地方,還望各位看官指出糾正。
介紹
MVVM已經出來了較長一段時間了,而這個模式則是將 MVVM、kotlin 兩個結合而形成,顯得十分合適,kotlin本身的簡短、lambda寫法配合LiveData的觀察者模式使得程式碼的結構和層次更加鮮明。MVVM-LiveData_kotlin這一結構包含了多個部分內容,如下就該結構各個部分進行簡要的分析、並將Retrofit與LiveData進行配對實現網路請求(替代RxJava+Retrofit).
- MVVM的組成結構
- MVVM之DataBinding的使用
- MVVM之LiveData的使用
- MVVM之Room的使用
- MVVM之Retrofit與LiveData的整合
- MVVM之ViewModel的簡單封裝
本篇不免落入俗套的介紹下MVVM的背景介紹之中。
MVVM 結構
首先談談什麼是mvvm,android開發中有關於介面和資料的繫結這塊一直都是研究的重點。隨著APP的介面越來越多樣、業務變得越來越複雜,一個介面上所需要處理的資料也就越來越多,這時候傳統的findView方式顯然使得開發者產生不滿,所以有butterknife這樣的註解繫結控制元件的出現,而業務與介面狀態的不斷變化處理漸漸冗長,就導致了Databinding這類資料繫結的出現,而MVVM就是基於databinding這類繫結式的APP開發框架。其結構如下:
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開發相關部落格更新!