2019獨角獸企業重金招聘Python工程師標準>>>
我記得前段時間分享了一篇文章《?淺談Andorid開發中的MVP模式》(點擊可跳轉),反響不錯,為了進一步介紹MVVM模式,還提前分享了實現Android中MVVM模式的一個關鍵技術的文章《Android 數據綁定框架DataBinding,堪稱解決界面邏輯的黑科技》(點擊可跳轉) 。如果沒有看過這兩篇文章的,建議先看看這兩篇文章,再看下面的分享。
?
什么是MVVM?
?
MVVM是Model-View-ViewModel的簡寫。微軟的WPF帶來了新的技術體驗,如Silverlight、音頻、視頻、3D、動畫……,這導致了軟件UI層更加細節化、可定制化。同時,在技術層面,WPF也帶來了 諸如Binding、Dependency Property、Routed Events、Command、DataTemplate、ControlTemplate等新特性。MVVM(Model-View-ViewModel)框架的由來便是MVP(Model-View-Presenter)模式與WPF結合的應用方式時發展演變過來的一種新型架構框架。它立足于原有MVP框架并且把WPF的新特性糅合進去,以應對客戶日益復雜的需求變化。
?
MVC和MVP,MVVM之間的關系
?
MVC和MVP的關系
我們都知道MVP是從經典的模式MVC演變而來,它們的基本思想有相通的地方:Controller/Presenter負責邏輯的處理,Model提供數 據,View負責顯示。作為一種新的模式,MVP與MVC有著一個重大的區別:在MVP中View并不直接使用Model,它們之間的通信是通過 Presenter (MVC中的Controller)來進行的,所有的交互都發生在Presenter內部,而在MVC中View會直接從Model中讀取數據而不是通過 Controller。
?
MVVM和MVP的關系
而 MVVM 模式將 Presenter 改名為 ViewModel,基本上與 MVP 模式完全一致。 唯一的區別是,它采用雙向綁定(data-binding):View的變動,自動反映在 ViewModel,反之亦然。這樣開發者就不用處理接收事件和View更新的工作,框架已經幫你做好了。
?
視圖化解釋關系
?
MVC架構:
View:對應于布局文件
Model:業務邏輯和實體模型
Controllor:對應于Activity
-
View可以與Model直接交互。
-
Controller是基于行為的,并且可以被多個View共享。
-
可以負責決定顯示哪個View。
?
MVP架構:
View: 對應于Activity,負責View的繪制以及與用戶交互
Model: 依然是業務邏輯和實體模型
Presenter: 負責完成View于Model間的交互
-
View不直接與Model交互,而是通過與Presenter交互來與Model間接交互。
-
Presenter與View的交互是通過接口來進行的。
-
通常View與Presenter是一對一的,但復雜的View可能綁定多個Presenter來處理邏輯。
?
MVVM架構:
Model:代表你的基本業務邏輯
View:顯示內容
ViewModel:將前面兩者聯系在一起的對象
一個ViewModel接口提供了兩個東西:動作和數據。動作改變Model的下層(click listener,監聽文字改變的listener等等),而數據則是Model的內容。
?
去年的I/O大會上谷歌介紹了一個非常好用的新框架DataBinding,該框架可以讓你將view和一個對象的對field綁定。當field更新的時候,framework將收到通知,同時view也會自動更新。其語法和使用方式和 JSP 中的 EL 表達式非常類似。
?
在MVVM中,ViewModel在改變內容之后通知binding framework內容發生了改變。然后framework自動更新和那些內容綁定的view。這兩個組件只是通過ViewModel松耦合在一起。這種設計模式之所以好用和方便,除了明顯智能化了的View之外,還方便了測試。因為ViewModel不在依賴于View了,你可以在沒有View的情況下也能測試ViewModel。在合適的依賴注入的幫助下,測試就會變得非常簡單。
?
MVVM的優點
?
1. 低耦合。視圖(View)可以獨立于Model變化和修改,一個ViewModel可以綁定到不同的"View"上,當View變化的時候Model可以不變,當Model變化的時候View也可以不變。
?
2. 可重用性。你可以把一些視圖邏輯放在一個ViewModel里面,讓很多view重用這段視圖邏輯。
?
3. 獨立開發。開發人員可以專注于業務邏輯和數據的開發(ViewModel),設計人員可以專注于頁面設計。
?
4. 可測試。界面素來是比較難于測試的,而現在測試可以針對ViewModel來寫。
?
具體怎么好用,怎么使用,建議參考我寫的《Android 數據綁定框架DataBinding,堪稱解決界面邏輯的黑科技》這篇文章。
?
參考文章:
《?淺談Andorid開發中的MVP模式》(點擊可跳轉)
《Android 數據綁定框架DataBinding,堪稱解決界面邏輯的黑科技》(點擊可跳轉)