[譯]Android中的Model View Presenter(MVP), Part 1

原文鏈接:http://www.tinmegali.com/en/model-view-presenter-android-part-1/
作者主頁(yè):http://www.tinmegali.com/en/


架構(gòu)模式是計(jì)算機(jī)科學(xué)的基礎(chǔ)徽职,它是維持一個(gè)工程干凈、可擴(kuò)展以及可測(cè)試的唯一方式。模式已經(jīng)是發(fā)展多年的解決方案狼纬,并且被視為工業(yè)標(biāo)準(zhǔn)。它們?cè)诔掷m(xù)的發(fā)展,在Android SDK中,可靠的模型-視圖-控制器模式正漸漸地因模型-視圖-展示器模式而廢棄孝治。
文章的第一部分將主要討論MVC(Model View Controller)和MVP(Model View Presenter)的差別、為什么MVC將被廢棄以及MVP如何適應(yīng)Android SDK并發(fā)揮其優(yōu)勢(shì)审磁。

Android SDK

當(dāng)我們簡(jiǎn)要分析Android SDK谈飒,尤其是分析layout和Activity以及data間的關(guān)系時(shí),我們印象中最適合Android的就是MVC了态蒂。然而杭措,隨著工程越來(lái)越復(fù)雜,MVC提供的關(guān)注點(diǎn)分離(separation of concerns)已經(jīng)不夠钾恢,這點(diǎn)在實(shí)現(xiàn)單元測(cè)試時(shí)尤為明顯手素。
然而,在Android的設(shè)計(jì)計(jì)劃中是允許開發(fā)者使用其他類型的架構(gòu)模式瘩蚪,甚至沒(méi)有任何模式的泉懦,即所謂的反模式。即使MVC是可靠并且廣為人知的解決方案疹瘦,但因?yàn)樗男⌒值躆VP的存在祠斧,其地位每況愈下,MVP有著一些優(yōu)勢(shì)拱礁,比如設(shè)計(jì)更好的關(guān)注點(diǎn)分離。

我應(yīng)該在項(xiàng)目中使用MVC還是MVP呢辕漂?

對(duì)于這個(gè)問(wèn)題呢灶,其實(shí)沒(méi)有準(zhǔn)確的答案。有些人認(rèn)為MVC是解決方案钉嘹,還有一些人站在MVP這邊鸯乃,還有一些人傾向于另一個(gè)方案,例如MVVM跋涣。每種方案都有著其優(yōu)缺點(diǎn)缨睡。這意味著唯一能回答這個(gè)問(wèn)題的前提就是你了解每種方案的優(yōu)勢(shì)和劣勢(shì),這樣你就可以做出明智的選擇陈辱。

MVC的定義

模型-視圖-控制器是一種軟件架構(gòu)模式奖年,它主要用于(但不僅限于)實(shí)現(xiàn)計(jì)算機(jī)上的用戶界面。MVC把一個(gè)軟件程序分成相互聯(lián)系的3個(gè)部分沛贪,使得把內(nèi)部表示的消息和展示給用戶的信息或者從用戶接收的信息分離開來(lái)陋守。
來(lái)自維基百科
模型-視圖-展示器(MVP)是由MVC架構(gòu)模式推到出來(lái)的震贵,主要用于構(gòu)造用戶界面
在MVP中水评,presenter充當(dāng)“中間人”的角色猩系,所有展示邏輯都交由它處理。
來(lái)自維基百科

MVC vs MVP

MVC和MVP的差別

模型-視圖-展示器(MVP)

  • 視圖和模型分離中燥。展示器Presenter在Model和View間充當(dāng)中介寇甸。
  • 更容易創(chuàng)建單元測(cè)試。
  • 一般情況下疗涉,View和Presenter是一一對(duì)應(yīng)的拿霉,但對(duì)于復(fù)雜的View,有可能會(huì)對(duì)應(yīng)多個(gè)Presenter博敬。

模型-視圖-控制器(MVC)

  • 控制器是基于行為的友浸,并且可以共享多個(gè)view
  • 視圖可以直接和View交互

Android中的MVP

Android中的關(guān)注點(diǎn)分離不是很明確。例如偏窝,Activity和數(shù)據(jù)機(jī)制之間有著很緊密的聯(lián)系收恢。雖然,應(yīng)用程序成為可擴(kuò)展的祭往、可維護(hù)的和可測(cè)試的伦意,但是,創(chuàng)建一個(gè)深度的關(guān)注點(diǎn)分離是很重要的硼补,這也是我們采用MVP的最大優(yōu)勢(shì)驮肉。

Android中MVP的層級(jí)關(guān)系

實(shí)現(xiàn)MVP模式的最佳方式

這是一個(gè)模糊的話題。有很多有趣的方式實(shí)現(xiàn)MVP已骇,同樣也有很多方案用于Android上。模式實(shí)現(xiàn)方式因Presenter充當(dāng)?shù)慕巧煌煌蚀ⅰ5玀VP的核心是獨(dú)立于選擇之外的卵渴,應(yīng)該這樣維護(hù):

Presenter
Presenter充當(dāng)View和Model之間的“中間人”,它從Model中提起數(shù)據(jù)鲤竹,格式化后返回給View碘橘。和典型的MVC不同,Presenter還決定了你和View交互時(shí)發(fā)生什么岩榆。
View
View,通常由Activity實(shí)現(xiàn)折联,它包含了一個(gè)Presenter的引用。View唯一需要做的就是在有交互動(dòng)作時(shí)祥款,調(diào)用Presenter的方法抠艾。
Model
在一個(gè)擁有好的層級(jí)架構(gòu)的應(yīng)用中检号,Model僅僅是通往領(lǐng)域曾或業(yè)務(wù)邏輯的門戶。就把它看做我們想展示在View中數(shù)據(jù)的提供者吧。
上面這些極好的定義都是摘選自Antonio Leiva’s 文章.

在這個(gè)系列的下一篇文章中玛痊,我們將給出Android中MVP模式的實(shí)現(xiàn)卿啡。我們將采取更保守的方式,那就是僅僅使用標(biāo)準(zhǔn)的Android代碼俊鱼,而不會(huì)有任何Android SDK之外的任何第三方庫(kù)。這種方式會(huì)幫助我們理解MVP中不同層次之間的關(guān)系俗批。
如果你想了解最終的MVP庫(kù)(這個(gè)庫(kù)基于[Douglas C. Schmidt博士]的愿景放手去做的)岁忘,那么你將會(huì)很快就能看到!

引用

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖阔蛉,帶你破解...
    沈念sama閱讀 217,657評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件聋呢,死亡現(xiàn)場(chǎng)離奇詭異削锰,居然都是意外死亡蛹稍,警方通過(guò)查閱死者的電腦和手機(jī)奉芦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門筹裕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)朝卒,“玉大人瑞眼,你說(shuō)我怎么就攤上這事。” “怎么了部默?”我有些...
    開封第一講書人閱讀 164,057評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵算凿,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我炉抒,道長(zhǎng)拿诸,這世上最難降的妖魔是什么亩码? 我笑而不...
    開封第一講書人閱讀 58,509評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘寥院。我一直安慰自己阿迈,他們只是感情好待逞,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,562評(píng)論 6 392
  • 文/花漫 我一把揭開白布嗤无。 她就那樣靜靜地躺著,像睡著了一般怜庸。 火紅的嫁衣襯著肌膚如雪当犯。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,443評(píng)論 1 302
  • 那天割疾,我揣著相機(jī)與錄音嚎卫,去河邊找鬼。 笑死宏榕,一個(gè)胖子當(dāng)著我的面吹牛拓诸,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播麻昼,決...
    沈念sama閱讀 40,251評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼奠支,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了抚芦?” 一聲冷哼從身側(cè)響起倍谜,我...
    開封第一講書人閱讀 39,129評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤迈螟,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后尔崔,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體井联,經(jīng)...
    沈念sama閱讀 45,561評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,779評(píng)論 3 335
  • 正文 我和宋清朗相戀三年您旁,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片轴捎。...
    茶點(diǎn)故事閱讀 39,902評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡鹤盒,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出侦副,到底是詐尸還是另有隱情侦锯,我是刑警寧澤,帶...
    沈念sama閱讀 35,621評(píng)論 5 345
  • 正文 年R本政府宣布秦驯,位于F島的核電站尺碰,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏译隘。R本人自食惡果不足惜亲桥,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,220評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望固耘。 院中可真熱鬧题篷,春花似錦、人聲如沸厅目。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)损敷。三九已至葫笼,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間拗馒,已是汗流浹背路星。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留瘟忱,地道東北人奥额。 一個(gè)月前我還...
    沈念sama閱讀 48,025評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像访诱,于是被迫代替她去往敵國(guó)和親垫挨。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,843評(píng)論 2 354

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