MVP,MVC,MVVM的區(qū)別以及使用


一粪小、MVP架構模式

1瘟判、MVP的實現(xiàn)思路是:用戶操作View,在Presenter層完成業(yè)務邏輯處理整胃,更新Model層送悔,通過Presenter將數(shù)據(jù)顯示在View層,完全隔斷Model和View之間的通信爪模。

我們通過接口的方式來連接view和presenter層,這樣導致的問題是荚藻,如果頁面過于復雜屋灌,我們的接口就會很多,為了更好的處理類似的問題应狱,需要定義一些基類接口共郭,把一些公共的邏輯,比如網(wǎng)絡請求疾呻,toast除嘹,提示框等放在里面。

因為MVP不依賴Model岸蜗,所以可以更好的進行組件化尉咕,把它從特定的場景中脫離出來,做到高度復用璃岳。MVP中的Presenter更多的作為框架的控制者年缎,承擔了大量的邏輯操作。

2铃慷、MVP和MVC的區(qū)別

在MVP中View并不直接使用Model单芜,它們之間的通信是通過Presenter (MVC中的Controller)來進行的,所有的交互都發(fā)生在Presenter內(nèi)部犁柜,而在MVC中View會直接從Model中讀取數(shù)據(jù)而不是通過 Controller洲鸠。

在MVC里,View是可以直接訪問Model的馋缅!從而扒腕,View里會包含Model信息绢淀,不可避免的還要包括一些業(yè)務邏輯。 在MVC模型里袜匿,更關注的Model的不變更啄,而同時有多個對Model的不同顯示,即View居灯。所以祭务,在MVC模型里,Model不依賴于View怪嫌,但是View是依賴于Model的义锥。不僅如此,因為有一些業(yè)務邏輯在View里實現(xiàn)了岩灭,導致要更改View也是比較困難的拌倍,至少那些業(yè)務邏輯是無法重用的。

數(shù)據(jù)關系

View 接收用戶交互請求

View 將請求轉(zhuǎn)交給 Presenter

Presenter 操作Model進行數(shù)據(jù)更新

Model 通知Presenter數(shù)據(jù)發(fā)生變化

Presenter 更新View數(shù)據(jù)

而MVP各部分之間都是雙向通信的

3噪径、MVP的使用方式

MVP的實現(xiàn)會根據(jù)View的實現(xiàn)而有一些不同柱恤,一部分傾向于在View中放置簡單的邏輯,在Presenter放置復雜的邏輯找爱;另一部分傾向于在presenter中放置全部的邏輯梗顺。這兩種分別被稱為:Passive View和Superivising Controller。

.NET程序員熟知的ASP.NET webform车摄、winform基于事件驅(qū)動的開發(fā)技術就是使用的MVP模式茎杂。

二没宾、MVC架構模式

1诺凡、MVC的實現(xiàn)思路是:用戶操作View病瞳,在Controller層完成業(yè)務邏輯處理,更新Model層意狠,將數(shù)據(jù)顯示在View層粟关。

在MVC中,每個層之間都有關聯(lián)环戈,耦合比較緊誊役,在大型項目中,維護起來比較費力谷市。

View把控制權交給Controller層蛔垢,自己不執(zhí)行業(yè)務邏輯;Controller層執(zhí)行業(yè)務邏輯并且操作Model層迫悠,但不會直接操作View層鹏漆;View和Model層的同步消息是通過觀察者模式進行,而同步操作是由View層自己請求Model層的數(shù)據(jù),然后對視圖進行更新艺玲,觀察者模式可以做到多視圖同時更新括蝠。

2.設計 MVC 的重要目的:

就是在人的心智模型與計算機的模型之間建立一個橋梁,早期的 MVC作為架構模式中最出名并且應用最廣泛的架構模式饭聚,MVC 并沒有一個明確的定義忌警,網(wǎng)上流傳的 MVC 架構圖也是形態(tài)各異,小編找了很多資料也沒有辦法確定到底什么樣的架構圖才是標準的 MVC 實現(xiàn)秒梳。

數(shù)據(jù)關系

View 接受用戶交互請求

View 將請求轉(zhuǎn)交給Controller

Controller 操作Model進行數(shù)據(jù)更新

數(shù)據(jù)更新之后法绵,Model通知View更新數(shù)據(jù)變化

View 更新變化數(shù)據(jù)

而所有的方式都是單向通信的。

3酪碘、MVC的使用方式

MVC中的View是可以直接訪問Model的朋譬!從而,View里會包含Model信息兴垦,不可避免的還要包括一些業(yè)務邏輯徙赢。在MVC模型里,更關注的Model的不變探越,而同時有多個對Model的不同顯示狡赐,及View。所以钦幔,在MVC模型里阴汇,Model不依賴于View,但是 View是依賴于Model的节槐。不僅如此,因為有一些業(yè)務邏輯在View里實現(xiàn)了拐纱,導致要更改View也是比較困難的铜异,至少那些業(yè)務邏輯是無法重用的。

MVC使用非常廣泛秸架,比如JavaEE中的SSH框架(Struts/Spring/Hibernate)揍庄,Struts(View, STL)-Spring(Controller, Ioc、Spring MVC)-Hibernate(Model, ORM)以及ASP.NET中的ASP.NET MVC框架东抹,xxx.cshtml-xxxcontroller-xxxmodel蚂子。(實際上后端開發(fā)過程中是v-c-m-c-v,v和m并沒有關系缭黔,下圖僅代表經(jīng)典的mvc模型)

三食茎、MVVM架構模式

1、MVVM和MVP的最大區(qū)別是采用了雙向綁定機制馏谨,View的變動别渔,自動反映在ViewModel上。

數(shù)據(jù)關系

View 接收用戶交互請求

View 將請求轉(zhuǎn)交給ViewModel

ViewModel 操作Model數(shù)據(jù)更新

Model 更新完數(shù)據(jù),通知ViewModel數(shù)據(jù)發(fā)生變化

ViewModel 更新View數(shù)據(jù)

2哎媚、MVVM優(yōu)點

MVVM模式和MVC模式一樣喇伯,主要目的是分離視圖(View)和模型(Model),有幾大優(yōu)點:

低耦合拨与。View可以獨立于Model變化和修改稻据,一個ViewModel可以綁定到不同的”View”上,當View變化的時候Model可以不變买喧,當Model變化的時候View也可以不變捻悯。

可重用性。你可以把一些視圖邏輯放在一個ViewModel里面岗喉,讓很多view重用這段視圖邏輯秋度。

獨立開發(fā)。開發(fā)人員可以專注于業(yè)務邏輯和數(shù)據(jù)的開發(fā)(ViewModel)钱床,設計人員可以專注于頁面設計荚斯,生成xml代碼。

可測試查牌。界面素來是比較難于測試的事期,而現(xiàn)在測試可以針對ViewModel來寫。

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末纸颜,一起剝皮案震驚了整個濱河市兽泣,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌胁孙,老刑警劉巖唠倦,帶你破解...
    沈念sama閱讀 221,430評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異涮较,居然都是意外死亡稠鼻,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,406評論 3 398
  • 文/潘曉璐 我一進店門狂票,熙熙樓的掌柜王于貴愁眉苦臉地迎上來候齿,“玉大人,你說我怎么就攤上這事闺属』哦ⅲ” “怎么了?”我有些...
    開封第一講書人閱讀 167,834評論 0 360
  • 文/不壞的土叔 我叫張陵掂器,是天一觀的道長亚皂。 經(jīng)常有香客問我,道長国瓮,這世上最難降的妖魔是什么孕讳? 我笑而不...
    開封第一講書人閱讀 59,543評論 1 296
  • 正文 為了忘掉前任匠楚,我火速辦了婚禮,結果婚禮上厂财,老公的妹妹穿的比我還像新娘芋簿。我一直安慰自己,他們只是感情好璃饱,可當我...
    茶點故事閱讀 68,547評論 6 397
  • 文/花漫 我一把揭開白布与斤。 她就那樣靜靜地躺著,像睡著了一般荚恶。 火紅的嫁衣襯著肌膚如雪撩穿。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,196評論 1 308
  • 那天谒撼,我揣著相機與錄音食寡,去河邊找鬼。 笑死廓潜,一個胖子當著我的面吹牛抵皱,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播辩蛋,決...
    沈念sama閱讀 40,776評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼呻畸,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了悼院?” 一聲冷哼從身側(cè)響起伤为,我...
    開封第一講書人閱讀 39,671評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎据途,沒想到半個月后绞愚,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,221評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡颖医,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,303評論 3 340
  • 正文 我和宋清朗相戀三年位衩,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片便脊。...
    茶點故事閱讀 40,444評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖光戈,靈堂內(nèi)的尸體忽然破棺而出哪痰,到底是詐尸還是另有隱情,我是刑警寧澤久妆,帶...
    沈念sama閱讀 36,134評論 5 350
  • 正文 年R本政府宣布晌杰,位于F島的核電站,受9級特大地震影響筷弦,放射性物質(zhì)發(fā)生泄漏肋演。R本人自食惡果不足惜抑诸,卻給世界環(huán)境...
    茶點故事閱讀 41,810評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望爹殊。 院中可真熱鬧蜕乡,春花似錦、人聲如沸梗夸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,285評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽反症。三九已至辛块,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間铅碍,已是汗流浹背润绵。 一陣腳步聲響...
    開封第一講書人閱讀 33,399評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留胞谈,地道東北人尘盼。 一個月前我還...
    沈念sama閱讀 48,837評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像呜魄,于是被迫代替她去往敵國和親悔叽。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,455評論 2 359

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