Model-View-Controller ,模型-視圖-控制器模式數據結構
MVC 總體的實現過程能夠歸納爲: Controller 來操做 Model並將結果返回給 View 展現 架構
從圖上能夠看出 MVC 模式的缺點是 View 定義不夠清晰,xml 文件屬於 View 可是 Activity 、Fragment 中也有 View 的操做,爲了解決這個問題,所以出現了 MVP 模式。學習
Model-View-Presenter,是 MVC 的演化版本。雙向綁定
MVP 總體的實現過程能夠歸納爲: Model 定義好存取接口,Presenter 經過接口調用 Model 中的接口獲取到結果,最後經過 View 接口去展現具體 Viewcdn
從上圖能夠看出 MVP 解決了 MVC 中 View 定義不清晰的問題,同時劃清了 Model 和 View 的界限,View 不能直接訪問 Model,Model 也是不能直接訪問 View。xml
MVP 的處理大部分都是經過接口去實現的,這也會致使代碼的邏輯層級較深,因此又出現了一個架構模式 MVVM。blog
瞭解的不是很深刻,寫的可能有誤,參考便可。接口
Model-View-ViewModel,和 MVP 相似,可是使用 ViewModel 替換了 Presenter 。開發
ViewModel :數據和 Model雙向綁定,View 發生改變後 ViewModel 會通知 Model 跟隨改變,同理 Model 改變 ViewModel 也會通知 View 跟隨改變。it
MVVM 雖然解決了 MVP 中代碼層級深度過深問題,可是須要使用 DataBinding,代碼層面也不易理解。
在實際開發中,採用 MVP 模式已經足夠了,雖然類文件會變多一些,可是可以下降代碼之間的偶爾同時便於維護,這就夠了。
對於 MVP 的學習,入門例子推薦 谷歌 GitHub 上的 TODO-MVP 例子。
若是想深刻能夠再把 TODO 系列看完,據說 MVP + RxJava + Dagger2 很香?