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