MVC臊泰、MVP和MVVM原理和比較

MVC模式原理

MVC,即Model-View-Controller蚜枢,意味:模型缸逃、視圖和控制器针饥。

  • Model
    • 程序需要操作的數(shù)據(jù)來(lái)源。通常是從數(shù)據(jù)庫(kù)需频、網(wǎng)絡(luò)請(qǐng)求或者是Bean數(shù)據(jù)丁眼。
    • 負(fù)責(zé)提供數(shù)據(jù)
  • View
    • 程序用來(lái)展示內(nèi)容的界面。通常是Activity贺辰、FragmentUI組件户盯。
    • 負(fù)責(zé)展示數(shù)據(jù)
  • Controller
    • 程序中用于處理Model數(shù)據(jù)業(yè)務(wù)邏輯并將結(jié)果輸送給View的中間層嵌施。
    • 負(fù)責(zé)處理業(yè)務(wù)邏輯
MVC模式流程.png

實(shí)際開(kāi)發(fā)中Activity究竟算Controller還是View說(shuō)不清楚饲化。理論上ActivityUI組件負(fù)責(zé)展示內(nèi)容,但很多項(xiàng)目中Activity處理了太多的業(yè)務(wù)邏輯操作吗伤。超過(guò)1000行代碼太常見(jiàn)了吃靠。根據(jù)這種情況我將Activity放到Controller上。只是個(gè)人習(xí)慣而已足淆!

優(yōu)缺點(diǎn)

  • 優(yōu)點(diǎn)
    • 耦合性低:視圖層和業(yè)務(wù)層分離巢块。
    • 重用性高:多個(gè)View能共享同一個(gè)Model
    • 部署快:責(zé)任分離巧号,各司其職族奢,職責(zé)清晰。
    • 可維護(hù)性高
  • 缺點(diǎn)
    • Controller角色比重太大丹鸿。雖然擔(dān)任控制器的職責(zé)越走,但現(xiàn)實(shí)開(kāi)發(fā)中類似ActivityUI卻做了很多View相關(guān)操作。VC分離不清靠欢。
    • 優(yōu)點(diǎn)中的耦合性低是相對(duì)的廊敌,現(xiàn)實(shí)中MVC的耦合性確實(shí)不低!

MVP模式原理

知道了MVC的不足之處门怪,MVP就是為了解決VC耦合這個(gè)問(wèn)題骡澈,在MVC的基礎(chǔ)上變種出來(lái)的框架。

M幾乎沒(méi)有變化掷空,只是把VC抽出來(lái)變成了VP肋殴。

MVP核心思想

MVPActivity中的UI邏輯抽象成View接口,把業(yè)務(wù)邏輯抽象成Presenter接口坦弟,Model類還是原來(lái)的Model疼电。

減輕了Activity的工作,因?yàn)榇蟛糠止ぷ鞫紒G到了Presenter那去了减拭。自己只要管理好生命周期即可蔽豺。

MVP模式.png

根據(jù)上圖,代碼所需的實(shí)現(xiàn):

  • 創(chuàng)建IPresenter表示業(yè)務(wù)邏輯接口拧粪,由PresenterImpl實(shí)現(xiàn)
  • 創(chuàng)建IView接口表示UI邏輯實(shí)現(xiàn)修陡,由Activity沧侥、FragmentUI組件實(shí)現(xiàn)
  • Activity關(guān)聯(lián)PresenterImpl用于調(diào)用業(yè)務(wù)方法
  • PresenterImpl關(guān)聯(lián)Activity用于調(diào)用UI方法
  • Model木有變化,還是原來(lái)的Model~?(?*)

優(yōu)缺點(diǎn)

  • 優(yōu)點(diǎn)
    • 結(jié)構(gòu)清晰魄鸦,比MVC要清晰多了
  • 缺點(diǎn)
    • 每個(gè)View都有個(gè)Presenter宴杀,多了也是個(gè)麻煩~

MVVM模式原理

MVVM模式利用了一個(gè)工具DataBinding實(shí)現(xiàn)了其中的VM。將數(shù)據(jù)和View綁定在一起拾因,這樣一來(lái)旺罢,數(shù)據(jù)發(fā)生改變,View會(huì)即時(shí)更新绢记。

  • Model
    • Model還是原來(lái)的Model扁达,負(fù)責(zé)提供實(shí)體模型。供VM使用蠢熄。
  • View
    • Activity跪解、Fragment以及View組件,這一塊只包含UI相關(guān)代碼签孔。不含有一點(diǎn)業(yè)務(wù)邏輯代碼叉讥。
    • 這才是真正的View模塊,View模塊就應(yīng)該只負(fù)責(zé)UI邏輯饥追。
  • ViewModel
    • 只負(fù)責(zé)業(yè)務(wù)邏輯
    • Model提供的實(shí)體數(shù)據(jù)View中真正展示數(shù)據(jù)的UI組件通過(guò)DataBinding綁定在一起图仓。
    • 我們就不用像以前那樣,等Bean改變后但绕,get里面的屬性值救崔。然后獲取UI組件的引用,將屬性值設(shè)置到UI組件上壁熄。
    • VM綁定在一起帚豪,Model一改變,View自動(dòng)實(shí)時(shí)更新草丧!
MVVM模式.png

優(yōu)缺點(diǎn)

  • 優(yōu)點(diǎn)
    • 雙向綁定技術(shù)狸臣,Model變化,View自動(dòng)更新昌执≈蛞啵或者說(shuō),Model變化懂拾,ViewModelView自動(dòng)更新(角度不一樣而已)煤禽。
    • 模塊之間職責(zé)更清晰
    • 控制器功能大都到了View上岖赋,大大減輕壓力檬果。
  • 缺點(diǎn)
    • DataBinding很難進(jìn)行調(diào)試,出現(xiàn)問(wèn)題很難進(jìn)行定位。
    • 大項(xiàng)目中Model會(huì)很大选脊,長(zhǎng)期占有不能釋放會(huì)占內(nèi)存杭抠。
    • View重用性降低MVVM中的一個(gè)View綁定一個(gè)Model恳啥。不同模塊的View都不同偏灿,重用困難。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末钝的,一起剝皮案震驚了整個(gè)濱河市翁垂,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌硝桩,老刑警劉巖沿猜,帶你破解...
    沈念sama閱讀 222,865評(píng)論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異亿柑,居然都是意外死亡邢疙,警方通過(guò)查閱死者的電腦和手機(jī)棍弄,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,296評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門望薄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人呼畸,你說(shuō)我怎么就攤上這事痕支。” “怎么了蛮原?”我有些...
    開(kāi)封第一講書人閱讀 169,631評(píng)論 0 364
  • 文/不壞的土叔 我叫張陵卧须,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我儒陨,道長(zhǎng)花嘶,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 60,199評(píng)論 1 300
  • 正文 為了忘掉前任蹦漠,我火速辦了婚禮椭员,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘笛园。我一直安慰自己隘击,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,196評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布研铆。 她就那樣靜靜地躺著埋同,像睡著了一般。 火紅的嫁衣襯著肌膚如雪棵红。 梳的紋絲不亂的頭發(fā)上凶赁,一...
    開(kāi)封第一講書人閱讀 52,793評(píng)論 1 314
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼虱肄。 笑死楼熄,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的浩峡。 我是一名探鬼主播可岂,決...
    沈念sama閱讀 41,221評(píng)論 3 423
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼翰灾!你這毒婦竟也來(lái)了缕粹?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 40,174評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤纸淮,失蹤者是張志新(化名)和其女友劉穎平斩,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體咽块,經(jīng)...
    沈念sama閱讀 46,699評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡绘面,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,770評(píng)論 3 343
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了侈沪。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片揭璃。...
    茶點(diǎn)故事閱讀 40,918評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖亭罪,靈堂內(nèi)的尸體忽然破棺而出瘦馍,到底是詐尸還是另有隱情,我是刑警寧澤应役,帶...
    沈念sama閱讀 36,573評(píng)論 5 351
  • 正文 年R本政府宣布情组,位于F島的核電站,受9級(jí)特大地震影響箩祥,放射性物質(zhì)發(fā)生泄漏院崇。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,255評(píng)論 3 336
  • 文/蒙蒙 一袍祖、第九天 我趴在偏房一處隱蔽的房頂上張望底瓣。 院中可真熱鬧,春花似錦盲泛、人聲如沸濒持。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 32,749評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)柑营。三九已至,卻和暖如春村视,著一層夾襖步出監(jiān)牢的瞬間官套,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,862評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留奶赔,地道東北人惋嚎。 一個(gè)月前我還...
    沈念sama閱讀 49,364評(píng)論 3 379
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像站刑,于是被迫代替她去往敵國(guó)和親另伍。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,926評(píng)論 2 361

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