通過一年的努力推進,公司研發部門同事終於走上了規範之路。對於舊項目的代碼維護真是苦不堪言,一個OTA升級項目的實現,僅用了三個類實現全部的功能,修個小bug,用了兩天在看整個項目代碼怎麼實現的...動一下就崩一下那種。數據庫
因此,能告訴我,爲何還要在Activity中寫業務代碼麼?網絡
關於Android的MVVM開發框架,多是老生常談。與如停留在概念上講解,不如與實戰開發一塊兒來講說。與MVC、MVP等模式的設計理念是一致的,就是爲了解耦,方便後期維護和功能迭代。框架
MVVM模式在Android能夠解讀如下三個對象:View: 這樣指的應該是Activity、Fragment等UI控制器以及相關具體的View,固然也包括xml佈局文件。主要負責界面的實現和與用戶的交互。函數
Model: 數據模型,能夠說,是應用對外數據交互的接口。在Model層關心的應該是數據。例如根據應用的不一樣環境或邏輯,從網絡或者本地獲取數據,爲ViewModel提供數據。佈局
ViewModel:View與Model交互的橋樑,也是應用邏輯實現的地方。將曾經大量在View層實現的邏輯代碼轉移到自身,從而減小UI控制器代碼的臃腫。post
採用MVVM模式在實際開發帶來的好處是什麼?設計
不可避免的是,不管是MVC、MVP仍是咱們所說的MVVM模式,都會致使類和代碼的增長,但請相信,這值得去作。雙向綁定
View層只關心和UI相關的工做,咱們只在Activity、Fragment和xml佈局寫和UI相關代碼,以及和用戶的交互,例如監聽用戶的點擊View以後,應該通知ViewModel去處理相關業務邏輯,而不是在Activity中處理。code
更但願的時候,經過數據驅動來改變View,而不是View通知ViewModel有相關交互。例如,經過Jetpack中DataBinding
來實現雙向綁定。View的點擊事件直接傳遞到ViewModel層,ViewModel層處理相關邏輯。或者View層監聽ViewModel的LiveData
變量,在數據發生變動時更改View。而不是View層爲ViewModel層提供View改變的接口。cdn
下面是View層一些推薦文章:
ViewModel擔任着View與Model交互的橋樑和業務邏輯的處理,具備舉足輕重的地位。這裏咱們推薦使用Jetpack的ViewModel
,至於能帶來什麼好處,能夠看下文的連接。必定要記住,不要在ViewModel層去更新UI或者獲取數據,它只負責UI和數據邏輯的交互,但不負責View層 和Model層的工做。通常View層都會持有一個ViewModel實例,經過實例來操做數據,而操做結果經過改變LiveData
的值,來作相關UI改變,例如更新數據展現。
Model層負責數據的獲取,轉爲實體對象,映射到ViewModel層。ViewModel層通常持有Model實例,操做Model提供的接口。對於網絡請求,通常推薦使用Retrofit
,數據庫推薦Room
。在Model實現的操做通常都是耗時的,Java開發配合RxJava
,Kotlin開發使用協程,效果最佳。對實體對象的返回,常有回調函數和EventBus
來處理。
下圖是以MVVM模式開發的用戶登陸:
終生願望:但願各位研發同志早日用上開發框架MVVM也好,MVP也罷。