iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 19
1
Mobile Development

Android 開發經驗三十天系列 第 19

[Android 開發經驗三十天]#D19一LiveData && MVVM && MVP介紹

半夜睡不著覺 把心情哼成歌 剛好到桌前寫一篇鐵人文。/images/emoticon/emoticon06.gif


tags: 鐵人賽 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
}

上一篇
[Android 開發經驗三十天]#D18一自定義View小畫家 (畫面設計)
下一篇
[Android 開發經驗三十天+Spring Boot]D20一Spring Boot AWS EC2教學
系列文
Android 開發經驗三十天30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言