Android中的MVC、MVP和MVVM

一開始是沒有分層設(shè)計(jì)的概念的倘核,直到后來出現(xiàn)了圖形界面泣侮。

MVC起源

圖形界面的出現(xiàn),使交互方式相比之前的命令行發(fā)生了根本的改變:用戶操作界面去觸發(fā)程序內(nèi)部處理的邏輯紧唱,然后將處理的結(jié)果反饋到界面上活尊。這樣,才促使了分層思想的出現(xiàn)漏益。

分層的本質(zhì)是為了解耦蛹锰。在開發(fā)過程中,我們不希望在更改界面樣式的時(shí)候會(huì)影響到業(yè)務(wù)代碼绰疤,同理铜犬,在修改業(yè)務(wù)的同時(shí)波及到了界面的代碼。

MVC很好的解決了這種場(chǎng)景轻庆。

MVC將代碼分成三層癣猾,分別是: M(Model)層,代表數(shù)據(jù)模型余爆;V(View)層纷宇,代表視圖;C(Controller)層蛾方,代表控制層像捶。

在MVC架構(gòu)的程序中,View層接收到用戶的操作之后转捕,將其傳遞給Controller層,Controller層處理完成后更改Model層唆垃,然后Model層通知View層去更新界面五芝。如下圖所示:

MVC示意圖

而在Android中,我們平時(shí)創(chuàng)建的工程就是標(biāo)準(zhǔn)的MVC分層:其中l(wèi)ayout布局文件代表View層辕万,Activity就代表Controller層枢步,Model層就是我們?yōu)闃I(yè)務(wù)創(chuàng)建的數(shù)據(jù)模型沉删。

但是這樣會(huì)出現(xiàn)一個(gè)問題,由于布局文件代表的View層功能太弱醉途,部分View層的功能是在Activity中實(shí)現(xiàn)的矾瑰。這樣,Activity既充當(dāng)了Controller層隘擎,又充當(dāng)了View層殴穴,并沒有很好的實(shí)踐MVC思想。而且由于Activity在Android應(yīng)用中的特殊性货葬,充當(dāng)Controller層容易造成其自身回收不及時(shí)采幌,導(dǎo)致內(nèi)存泄漏等問題。

MVP傳承

MVP與MVC一脈相承震桶,從字面上看休傍,僅僅是將C改成了P。其中蹲姐,P代表Persenter磨取,它與MVC中的Controller功能類似。盡管這樣柴墩,MVP和MVC還有一個(gè)本質(zhì)的區(qū)別:

在MVP中,Model層是與View層完全解耦的拐邪,它們通過Presenter層來完成通訊慰毅。如下圖所示:

MVP示意圖

這里,Activity充當(dāng)?shù)腣iew層扎阶,接收到用戶的操作后汹胃,將其傳遞給Presenter層;Presenter層根據(jù)具體業(yè)務(wù)去操作處理Model之后东臀,拿到更新后的Model着饥,然后再去通知View層更新界面。

所以在Android中惰赋,MVP解決了MVC中Activity職責(zé)不單一的情況宰掉,并且使View層與Model層完全解耦,比MVC有著更良好的實(shí)踐赁濒。

MVVM

在Android中轨奄,MVVM的實(shí)現(xiàn),還得依賴于谷歌發(fā)布的DataBinding框架拒炎。

DataBinding框架實(shí)現(xiàn)了布局中控件與應(yīng)用中數(shù)據(jù)的雙向綁定挪拟,其中任何一方的修改,都能直接反應(yīng)在另一方身上击你。這樣玉组,在MVVM中谎柄,布局文件又重新充當(dāng)起View層,與ViewModel層進(jìn)行雙向綁定惯雳;而ViewModel通過具體的業(yè)務(wù)去操作處理Model層朝巫,并將自身的變化反應(yīng)到View層,如下圖所示:

MVVM示意圖
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末石景,一起剝皮案震驚了整個(gè)濱河市劈猿,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌鸵钝,老刑警劉巖糙臼,帶你破解...
    沈念sama閱讀 218,525評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異恩商,居然都是意外死亡变逃,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門怠堪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來揽乱,“玉大人,你說我怎么就攤上這事粟矿』嗣蓿” “怎么了?”我有些...
    開封第一講書人閱讀 164,862評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵陌粹,是天一觀的道長(zhǎng)撒犀。 經(jīng)常有香客問我,道長(zhǎng)掏秩,這世上最難降的妖魔是什么或舞? 我笑而不...
    開封第一講書人閱讀 58,728評(píng)論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮蒙幻,結(jié)果婚禮上映凳,老公的妹妹穿的比我還像新娘。我一直安慰自己邮破,他們只是感情好诈豌,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,743評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著抒和,像睡著了一般矫渔。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上摧莽,一...
    開封第一講書人閱讀 51,590評(píng)論 1 305
  • 那天庙洼,我揣著相機(jī)與錄音,去河邊找鬼。 笑死送膳,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的丑蛤。 我是一名探鬼主播叠聋,決...
    沈念sama閱讀 40,330評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼受裹!你這毒婦竟也來了碌补?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,244評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤棉饶,失蹤者是張志新(化名)和其女友劉穎厦章,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體照藻,經(jīng)...
    沈念sama閱讀 45,693評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡袜啃,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,885評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了幸缕。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片群发。...
    茶點(diǎn)故事閱讀 40,001評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖发乔,靈堂內(nèi)的尸體忽然破棺而出熟妓,到底是詐尸還是另有隱情,我是刑警寧澤栏尚,帶...
    沈念sama閱讀 35,723評(píng)論 5 346
  • 正文 年R本政府宣布起愈,位于F島的核電站,受9級(jí)特大地震影響译仗,放射性物質(zhì)發(fā)生泄漏抬虽。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,343評(píng)論 3 330
  • 文/蒙蒙 一古劲、第九天 我趴在偏房一處隱蔽的房頂上張望斥赋。 院中可真熱鬧,春花似錦产艾、人聲如沸疤剑。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,919評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)隘膘。三九已至,卻和暖如春杠览,著一層夾襖步出監(jiān)牢的瞬間弯菊,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,042評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工踱阿, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留管钳,地道東北人钦铁。 一個(gè)月前我還...
    沈念sama閱讀 48,191評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像才漆,于是被迫代替她去往敵國(guó)和親牛曹。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,955評(píng)論 2 355