一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

淺談開發(fā)中的MVVM模式及與MVP和MVC的區(qū)別

 昵稱32348297 2016-04-13

回復(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):

View:對應(yīng)于布局文件

Model:業(yè)務(wù)邏輯和實體模型

Controllor:對應(yīng)于Activity

  • View可以與Model直接交互。

  • Controller是基于行為的,并且可以被多個View共享。

  • 可以負責決定顯示哪個View。

MVP架構(gòu):

View: 對應(yīng)于Activity,負責View的繪制以及與用戶交互
Model: 依然是業(yè)務(wù)邏輯和實體模型
Presenter: 負責完成View于Model間的交互

  • View不直接與Model交互,而是通過與Presenter交互來與Model間接交互。

  • Presenter與View的交互是通過接口來進行的。

  • 通常View與Presenter是一對一的,但復(fù)雜的View可能綁定多個Presenter來處理邏輯。


MVVM架構(gòu):

Model:代表你的基本業(yè)務(wù)邏輯

View:顯示內(nèi)容

ViewModel:將前面兩者聯(lián)系在一起的對象

一個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,堪稱解決界面邏輯的黑科技這篇文章。


參考文章:

淺談Andorid開發(fā)中的MVP模式(點擊可跳轉(zhuǎn))

Android 數(shù)據(jù)綁定框架DataBinding,堪稱解決界面邏輯的黑科技(點擊可跳轉(zhuǎn))


    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    成人国产激情在线视频| 亚洲精品中文字幕一二三| 久热青青草视频在线观看| 亚洲精品成人午夜久久| 成人国产激情福利久久| 欧美日韩黑人免费观看| 丁香七月啪啪激情综合| 日本本亚洲三级在线播放| 高清亚洲精品中文字幕乱码| 亚洲精品中文字幕欧美| 欧美日韩国产成人高潮| 日本女人亚洲国产性高潮视频| 亚洲午夜av久久久精品| 久久天堂夜夜一本婷婷| 日本深夜福利在线播放| 国产免费观看一区二区| 微拍一区二区三区福利| 亚洲欧美日韩熟女第一页| 亚洲一区二区三区国产| 国产内射一级二级三级| 国产不卡的视频在线观看| 久久国产精品热爱视频| 在线懂色一区二区三区精品| 亚洲男女性生活免费视频| 成人亚洲国产精品一区不卡| 亚洲综合日韩精品欧美综合区| 开心久久综合激情五月天| 国产伦精品一区二区三区精品视频| 视频一区二区 国产精品| 黄色国产精品一区二区三区| 99久久免费看国产精品| 免费国产成人性生活生活片| 国产激情国产精品久久源| 在线观看国产成人av天堂野外| 久久大香蕉精品在线观看| 日韩精品区欧美在线一区| 国产精品亚洲一级av第二区| 中文字幕欧美视频二区| 亚洲欧美国产精品一区二区| 一级片黄色一区二区三区| 亚洲精品熟女国产多毛|