MVC和MVVM,MVP

MVC
MVC全名是Model View Controller污茵,是模型(model)-視圖(view)-控制器(controller)的縮寫樱报,一種軟件設(shè)計(jì)典范,用一種業(yè)務(wù)邏輯泞当、數(shù)據(jù)迹蛤、界面顯示分離的方法組織代碼,將業(yè)務(wù)邏輯聚集到一個(gè)部件里面襟士,在改進(jìn)和個(gè)性化定制界面及用戶交互的同時(shí)盗飒,不需要重新編寫業(yè)務(wù)邏輯。MVC被獨(dú)特的發(fā)展起來用于映射傳統(tǒng)的輸入敌蜂、處理和輸出功能在一個(gè)邏輯的圖形化用戶界面的結(jié)構(gòu)中箩兽。

數(shù)據(jù)關(guān)系
View 接受用戶交互請(qǐng)求
View 將請(qǐng)求轉(zhuǎn)交給Controller
Controller 操作Model進(jìn)行數(shù)據(jù)更新
數(shù)據(jù)更新之后,Model通知View更新數(shù)據(jù)變化
View 更新變化數(shù)據(jù)
方式
所有方式都是單向通信
結(jié)構(gòu)實(shí)現(xiàn)
View :使用 Composite模式 View和Controller:使用 Strategy模式 Model和 View:使用 Observer模式同步信息
使用
MVC中的View是可以直接訪問Model的章喉!從而汗贫,View里會(huì)包含Model信息,不可避免的還要包括一些業(yè)務(wù)邏輯秸脱。在MVC模型里落包,更關(guān)注的Model的不變,而同時(shí)有多個(gè)對(duì)Model的不同顯示摊唇,及View咐蝇。所以,在MVC模型里巷查,Model不依賴于View有序,但是 View是依賴于Model的。不僅如此岛请,因?yàn)橛幸恍I(yè)務(wù)邏輯在View里實(shí)現(xiàn)了旭寿,導(dǎo)致要更改View也是比較困難的,至少那些業(yè)務(wù)邏輯是無法重用的崇败。

MVP
mvp的全稱為Model-View-Presenter盅称,Model提供數(shù)據(jù)肩祥,View負(fù)責(zé)顯示,Controller/Presenter負(fù)責(zé)邏輯的處理缩膝。MVP與MVC有著一個(gè)重大的區(qū)別:在MVP中View并不直接使用Model混狠,它們之間的通信是通過Presenter (MVC中的Controller)來進(jìn)行的,所有的交互都發(fā)生在Presenter內(nèi)部疾层,而在MVC中View會(huì)直接從Model中讀取數(shù)據(jù)而不是通過 Controller将饺。

image.png

數(shù)據(jù)關(guān)系
View 接收用戶交互請(qǐng)求
View 將請(qǐng)求轉(zhuǎn)交給 Presenter
Presenter 操作Model進(jìn)行數(shù)據(jù)更新
Model 通知Presenter數(shù)據(jù)發(fā)生變化
Presenter 更新View數(shù)據(jù)
MVP的優(yōu)勢
Model與View完全分離,修改互不影響
更高效地使用云芦,因?yàn)樗械倪壿嫿换ザ及l(fā)生在一個(gè)地方—Presenter內(nèi)部
一個(gè)Preseter可用于多個(gè)View俯逾,而不需要改變Presenter的邏輯(因?yàn)閂iew的變化總是比Model的變化頻繁)。
更便于測試舅逸。把邏輯放在Presenter中桌肴,就可以脫離用戶接口來測試邏輯(單元測試)
方式
各部分之間都是雙向通信
結(jié)構(gòu)實(shí)現(xiàn)
View :使用 Composite模式 View和Presenter:使用 Mediator模式 Model和Presenter:使用 Command模式同步信息
MVC和MVP區(qū)別
MVP與MVC最大的一個(gè)區(qū)別就是:Model與View層之間倒底該不該通信(甚至雙向通信)
MVC和MVP關(guān)系
MVP:是MVC模式的變種。項(xiàng)目開發(fā)中琉历,UI是容易變化的坠七,且是多樣的,一樣的數(shù)據(jù)會(huì)有N種顯示方式旗笔;業(yè)務(wù)邏輯也是比較容易變化的彪置。為了使得應(yīng)用具有較大的彈性,我們期望將UI蝇恶、邏輯(UI的邏輯和業(yè)務(wù)邏輯)和數(shù)據(jù)隔離開來拳魁,而MVP是一個(gè)很好的選擇。Presenter代替了Controller撮弧,它比Controller擔(dān)當(dāng)更多的任務(wù)潘懊,也更加復(fù)雜。Presenter處理事件贿衍,執(zhí)行相應(yīng)的邏輯授舟,這些邏輯映射到Model操作Model。那些處理UI如何工作的代碼基本上都位于Presenter贸辈。MVC中的Model和View使用Observer模式進(jìn)行溝通释树;MPV中的Presenter和View則使用Mediator模式進(jìn)行通信;Presenter操作Model則使用Command模式來進(jìn)行擎淤∩萆叮基本設(shè)計(jì)和MVC相同:Model存儲(chǔ)數(shù)據(jù),View對(duì)Model的表現(xiàn)嘴拢,Presenter協(xié)調(diào)兩者之間的通信桩盲。在 MVP 中 View 接收到事件,然后會(huì)將它們傳遞到 Presenter, 如何具體處理這些事件炊汤,將由Presenter來完成正驻。如果要實(shí)現(xiàn)的UI比較復(fù)雜,而且相關(guān)的顯示邏輯還跟Model有關(guān)系抢腐,就可以在View和 Presenter之間放置一個(gè)Adapter姑曙。由這個(gè) Adapter來訪問Model和View,避免兩者之間的關(guān)聯(lián)迈倍。而同時(shí)伤靠,因?yàn)锳dapter實(shí)現(xiàn)了View的接口,從而可以保證與Presenter之 間接口的不變啼染。這樣就可以保證View和Presenter之間接口的簡潔宴合,又不失去UI的靈活性。

使用
MVP的實(shí)現(xiàn)會(huì)根據(jù)View的實(shí)現(xiàn)而有一些不同迹鹅,一部分傾向于在View中放置簡單的邏輯卦洽,在Presenter放置復(fù)雜的邏輯;另一部分傾向于在presenter中放置全部的邏輯斜棚。這兩種分別被稱為:Passive View和Superivising Controller阀蒂。

MVVM

MVVM是Model-View-ViewModel的簡寫。微軟的WPF帶來了新的技術(shù)體驗(yàn)弟蚀,如Silverlight蚤霞、音頻、視頻义钉、3D昧绣、動(dòng)畫……,這導(dǎo)致了軟件UI層更加細(xì)節(jié)化捶闸、可定制化夜畴。同時(shí),在技術(shù)層面鉴嗤,WPF也帶來了 諸如Binding斩启、Dependency Property、Routed Events醉锅、Command兔簇、DataTemplate、ControlTemplate等新特性硬耍。MVVM(Model-View-ViewModel)框架的由來便是MVP(Model-View-Presenter)模式與WPF結(jié)合的應(yīng)用方式時(shí)發(fā)展演變過來的一種新型架構(gòu)框架垄琐。它立足于原有MVP框架并且把WPF的新特性糅合進(jìn)去,以應(yīng)對(duì)客戶日益復(fù)雜的需求變化经柴。

image.png

數(shù)據(jù)關(guān)系
View 接收用戶交互請(qǐng)求
View 將請(qǐng)求轉(zhuǎn)交給ViewModel
ViewModel 操作Model數(shù)據(jù)更新
Model 更新完數(shù)據(jù)狸窘,通知ViewModel數(shù)據(jù)發(fā)生變化
ViewModel 更新View數(shù)據(jù)

方式
雙向綁定。View/Model的變動(dòng)坯认,自動(dòng)反映在 ViewModel翻擒,反之亦然氓涣。
使用
可以兼容你當(dāng)下使用的 MVC/MVP 框架。
增加你的應(yīng)用的可測試性陋气。
配合一個(gè)綁定機(jī)制效果最好劳吠。

MVVM優(yōu)點(diǎn)
MVVM模式和MVC模式一樣,主要目的是分離視圖(View)和模型(Model)巩趁,有幾大優(yōu)點(diǎn): 1. 低耦合痒玩。View可以獨(dú)立于Model變化和修改,一個(gè)ViewModel可以綁定到不同的”View”上议慰,當(dāng)View變化的時(shí)候Model可以不變蠢古,當(dāng)Model變化的時(shí)候View也可以不變。 2. 可重用性别凹。你可以把一些視圖邏輯放在一個(gè)ViewModel里面草讶,讓很多view重用這段視圖邏輯。 3. 獨(dú)立開發(fā)炉菲。開發(fā)人員可以專注于業(yè)務(wù)邏輯和數(shù)據(jù)的開發(fā)(ViewModel)到涂,設(shè)計(jì)人員可以專注于頁面設(shè)計(jì),生成xml代碼颁督。 4. 可測試践啄。界面素來是比較難于測試的,而現(xiàn)在測試可以針對(duì)ViewModel來寫沉御。

轉(zhuǎn)載屿讽,請(qǐng)說明來源:http://blog.csdn.net/hudan2714/article/details/50990359

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市吠裆,隨后出現(xiàn)的幾起案子伐谈,更是在濱河造成了極大的恐慌,老刑警劉巖试疙,帶你破解...
    沈念sama閱讀 221,273評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件诵棵,死亡現(xiàn)場離奇詭異,居然都是意外死亡祝旷,警方通過查閱死者的電腦和手機(jī)履澳,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,349評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來怀跛,“玉大人距贷,你說我怎么就攤上這事∥悄保” “怎么了忠蝗?”我有些...
    開封第一講書人閱讀 167,709評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長漓拾。 經(jīng)常有香客問我阁最,道長戒祠,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,520評(píng)論 1 296
  • 正文 為了忘掉前任速种,我火速辦了婚禮得哆,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘哟旗。我一直安慰自己,他們只是感情好栋操,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,515評(píng)論 6 397
  • 文/花漫 我一把揭開白布闸餐。 她就那樣靜靜地躺著,像睡著了一般矾芙。 火紅的嫁衣襯著肌膚如雪舍沙。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,158評(píng)論 1 308
  • 那天剔宪,我揣著相機(jī)與錄音拂铡,去河邊找鬼。 笑死葱绒,一個(gè)胖子當(dāng)著我的面吹牛感帅,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播地淀,決...
    沈念sama閱讀 40,755評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼失球,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了帮毁?” 一聲冷哼從身側(cè)響起实苞,我...
    開封第一講書人閱讀 39,660評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎烈疚,沒想到半個(gè)月后黔牵,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,203評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡爷肝,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,287評(píng)論 3 340
  • 正文 我和宋清朗相戀三年猾浦,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片灯抛。...
    茶點(diǎn)故事閱讀 40,427評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡跃巡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出牧愁,到底是詐尸還是另有隱情素邪,我是刑警寧澤,帶...
    沈念sama閱讀 36,122評(píng)論 5 349
  • 正文 年R本政府宣布猪半,位于F島的核電站兔朦,受9級(jí)特大地震影響偷线,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜沽甥,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,801評(píng)論 3 333
  • 文/蒙蒙 一声邦、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧摆舟,春花似錦亥曹、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,272評(píng)論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至照宝,卻和暖如春蛇受,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背厕鹃。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評(píng)論 1 272
  • 我被黑心中介騙來泰國打工兢仰, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人剂碴。 一個(gè)月前我還...
    沈念sama閱讀 48,808評(píng)論 3 376
  • 正文 我出身青樓把将,卻偏偏與公主長得像,于是被迫代替她去往敵國和親忆矛。 傳聞我的和親對(duì)象是個(gè)殘疾皇子秸弛,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,440評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容