半夜睡不著覺 把心情哼成歌 剛好到桌前寫一篇鐵人文。
鐵人賽
Templates
1.MVP
優點:責任分明,分工詳細,Model不會直接跟View交互
缺點:presenter越來越肥大,處理過多邏輯
view收到指令傳給presenter,presenter在與model交互,model被動傳回給presenter做處理,presenter在回傳給view
因為邏輯處理大部分都在presenter,所以如果要進行單元測試,view跟model並無耦合較好測試。
可以使用 View -- View Interface -- Presenter -- Model作互動
2.MVVM
1.優點:減少code要寫的數量,可復用性
2.缺點:入門較難
可以使用databinding / livedata來搭配使用
讓viewmodel減少寫callback的數量,改用監聽,view監聽到數據改變便會自己變動
使viewmodel只處理邏輯,不處理UI的部分
而Activity不寫業務邏輯和業務數據相關的代碼,更新UI通過數據綁定實現,盡量在ViewModel裡面做
而一個viewmodel因為不處理UI也可以對到多個view所以可以讓單元測試更加容易
讓寫測試更加順利
中間的repository是讓model 跟 vm中間交互的過程,也可以分更開
也可以使用View 利用 Data Binding 的方式與 ViewModel 進行溝通。。。
3.LiveData
1.優點:
UI 與數據保持一致,可以用觀察者模式觀察出來
livedata會通知對象,更新UI中的observer
1.2沒有內存洩漏
因為可以知道Lifecycle,所以在Lifecycle消失時livedata就消失
1.3因為如上所以可以節省資源
因為在livedata有的時候才會呼叫
code example
val nameObserver = Observer<PickerPhotoResponse> {
list ->
dosomething....
}
}
}
// Observe the LiveData, passing in this activity as the LifecycleOwner and the observer.
viewModel.showProgress.observe(this, nameObserver)
viewmodel
var showProgress: MutableLiveData<PickerPhotoResponse> = MutableLiveData() ..
fun change() {
showProgress=.... // change Something
}