谷歌的MVP標(biāo)準(zhǔn)

MVP爭(zhēng)論了很久个绍,各家祭出各家的MVP模式,可謂百家爭(zhēng)鳴写穴,谷歌終于按耐不住了惰拱,祭出了自己的 mvp的參考標(biāo)準(zhǔn)了,實(shí)在是不容易啊送。也終于停止mvp的各種爭(zhēng)論了偿短,特別是對(duì)The MVP這種浪費(fèi)時(shí)間又很lower的設(shè)計(jì)真的可以不用看了。

功力又上升一個(gè)階段了馋没。

Github的地址:
https://github.com/googlesamples/android-architecture

前言

Android官方終于發(fā)布了自己的MVP框架自己的實(shí)現(xiàn)昔逗,這個(gè)還真的不容易,等了這么久篷朵,之前都是各家實(shí)現(xiàn)各自的mvp框架勾怒,但是大概的思想是那么一回事,只是在處理細(xì)節(jié)的時(shí)候發(fā)生了分歧声旺。例如:

  • 關(guān)于ContentProvider如何進(jìn)行處理笔链,應(yīng)該放在那一層。
  • 在有Loader的情況下該如何處理腮猖。
  • 其它的情況鉴扫,如databing等等情況。

關(guān)于mvp的代碼分析文章:

http://mp.weixin.qq.com/s?__biz=MzA3ODg4MDk0Ng==&mid=403539764&idx=1&sn=d30d89e6848a8e13d4da0f5639100e5f&scene=0

學(xué)習(xí)總結(jié)

我實(shí)在是不想說(shuō)的太多缚够,碼字太累了幔妨,在github上鹦赎,谷歌把一切說(shuō)的非常的詳盡了谍椅。所以不多說(shuō)了。

注意的是:

  • 官方的mvp需要一個(gè) 契約類將view和presntent連接起來(lái)古话。

  • 官方使用的fragment雏吭,而不是在activity,因?yàn)樵蚝芎?jiǎn)單陪踩,首先杖们,contentProvider和 Loader定義的都是數(shù)據(jù)加載器悉抵,也就是屬于model的,Presenter 僅僅是一個(gè)主持人的角色摘完,所以姥饰,這些數(shù)據(jù)加載器,在activity中賦值給presenter孝治,甚至在官方的presenter中列粪,數(shù)據(jù)加載器也就是model通過(guò)構(gòu)造器傳入,而不是在presenter中去new ,自我感覺(jué)這種設(shè)計(jì)方法非常的奇妙也非常的合理谈飒,那么fragment成了view岂座,而activity則成了client:

    The separation between Activity and Fragment fits nicely with this implementation of MVP: the Activity is the overall controller that creates and connects views and presenters.

所以官方的推薦中,activity中不推薦作為 view杭措,因?yàn)閍ctivity中本身持有context费什,而context中contentprovider和loader有屬于model層。

A contract defining the view and the presenter

An Activity which is responsible for the creation of fragments and presenters
A Fragment which implements the view interface.

A presenter which implements the presenter interface

官方示例

在谷歌托管到github上有 6個(gè)示例手素,其中有三個(gè)完成的示例鸳址,三個(gè)正在進(jìn)行中的示例,不過(guò)看了示例的源代碼后覺(jué)得代碼的水平和Android的源代碼差遠(yuǎn)了刑桑。

實(shí)際上下面的幾個(gè)例子氯质,其本質(zhì)是一樣的。MVP 祠斧,F(xiàn)ragment充當(dāng)View闻察,P不持有任何的Context,Activity用來(lái)組裝 P和View琢锋,或者說(shuō)組成P和view的關(guān)系聯(lián)系辕漂。

Basic Model-View-Presenter architecture.

image

fetches data using Loaders

image
image

在圖中,Loader 就不用說(shuō)了吴超,系統(tǒng)自帶的有一個(gè) CursorLoader钉嘹。在Presenter中,LoaderManger作為參數(shù)傳入的鲸阻,在MVP跋涣,P是不持有任何context對(duì)象的。所以 LoderManger的創(chuàng)建不能發(fā)生在P中鸟悴。

實(shí)際上陈辱,在谷歌發(fā)布的這一款 MVP中,P持有model细诸,但是model的創(chuàng)建不是P中進(jìn)行的沛贪,而是在P外進(jìn)行的,而Model的創(chuàng)建和 P與View建立的聯(lián)系是在activity中進(jìn)行的,fragment作為view存在利赋,activity更多的是作為組裝使用水评。

使用Fragment作為 View的原因:

  • The separation between Activity and Fragment fits nicely with this implementation of MVP: the Activity is the overall controller that creates and connects views and presenters.
  • Tablet layout or screens with multiple views take advantage of the Fragments framework.

uses the Data Binding Library

image

關(guān)于 DateBinding,以前還沒(méi)有接觸過(guò),不過(guò)看起來(lái)很牛逼的樣子:官網(wǎng)上是這樣的介紹的媚送。

The Data Binding Library saves on boilerplate code allowing UI elements to be bound to a property in a data model.

  • Layout files are used to bind data to UI elements
  • Events are also bound with an action handler
  • Data can be observed and set up to be updated automatically when needed

為了更直觀點(diǎn)中燥,我們看看使用data bindding 的xml文件

  <TextView
                android:id="@+id/noTasksAdd"
                android:layout_width="wrap_content"
                android:layout_height="48dp"
                android:layout_gravity="center"
                android:background="@drawable/touch_feedback"
                android:gravity="center"
                android:text="@string/no_tasks_add"
                android:onClick="@{() -> actionHandler.addNewTask()}"
                android:visibility="@{tasks.tasksAddViewVisible ? View.VISIBLE : View.GONE}" />

很神奇吧。在xml中直接綁定數(shù)據(jù)塘偎。關(guān)于這個(gè)框架褪那,在這里先不去看,等有時(shí)間或者機(jī)會(huì)在去看看這個(gè)框架式塌。

uses Content Providers

結(jié)構(gòu)和 user loader差不多博敬,這里不多說(shuō)了。

uses concepts from Clean Architecture

concepts from Clean Architecture 是一個(gè)新的概念結(jié)構(gòu)

image

domain layer是一個(gè)領(lǐng)域?qū)臃宄ⅲ裁词穷I(lǐng)域?qū)樱?/p>

首先我們 看看 The Clean Architecture 這個(gè)框架:

二個(gè)地址:

The Clean Architecture 框架或者說(shuō)架構(gòu)就是一種思想偏窝。從上面的圖可以看出,它將業(yè)務(wù)層單獨(dú)的分離出來(lái)武学。

uses Dagger2 for Dependency Injection

這個(gè)作者還沒(méi)有完成祭往。

實(shí)際上 Dagger 也是一個(gè)基于注釋的框架,實(shí)際上沒(méi)有什么的火窒。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末硼补,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子熏矿,更是在濱河造成了極大的恐慌已骇,老刑警劉巖,帶你破解...
    沈念sama閱讀 210,914評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件票编,死亡現(xiàn)場(chǎng)離奇詭異褪储,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)慧域,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評(píng)論 2 383
  • 文/潘曉璐 我一進(jìn)店門鲤竹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人昔榴,你說(shuō)我怎么就攤上這事辛藻。” “怎么了互订?”我有些...
    開封第一講書人閱讀 156,531評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵吱肌,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我屁奏,道長(zhǎng)岩榆,這世上最難降的妖魔是什么错负? 我笑而不...
    開封第一講書人閱讀 56,309評(píng)論 1 282
  • 正文 為了忘掉前任坟瓢,我火速辦了婚禮勇边,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘折联。我一直安慰自己粒褒,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,381評(píng)論 5 384
  • 文/花漫 我一把揭開白布诚镰。 她就那樣靜靜地躺著奕坟,像睡著了一般。 火紅的嫁衣襯著肌膚如雪清笨。 梳的紋絲不亂的頭發(fā)上月杉,一...
    開封第一講書人閱讀 49,730評(píng)論 1 289
  • 那天,我揣著相機(jī)與錄音抠艾,去河邊找鬼苛萎。 笑死,一個(gè)胖子當(dāng)著我的面吹牛检号,可吹牛的內(nèi)容都是我干的腌歉。 我是一名探鬼主播,決...
    沈念sama閱讀 38,882評(píng)論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼齐苛,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼翘盖!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起凹蜂,我...
    開封第一講書人閱讀 37,643評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤馍驯,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后玛痊,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體泥彤,經(jīng)...
    沈念sama閱讀 44,095評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,448評(píng)論 2 325
  • 正文 我和宋清朗相戀三年卿啡,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了吟吝。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,566評(píng)論 1 339
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡颈娜,死狀恐怖剑逃,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情官辽,我是刑警寧澤蛹磺,帶...
    沈念sama閱讀 34,253評(píng)論 4 328
  • 正文 年R本政府宣布,位于F島的核電站同仆,受9級(jí)特大地震影響萤捆,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,829評(píng)論 3 312
  • 文/蒙蒙 一俗或、第九天 我趴在偏房一處隱蔽的房頂上張望市怎。 院中可真熱鬧,春花似錦辛慰、人聲如沸区匠。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)驰弄。三九已至,卻和暖如春速客,著一層夾襖步出監(jiān)牢的瞬間戚篙,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工溺职, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留已球,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,248評(píng)論 2 360
  • 正文 我出身青樓辅愿,卻偏偏與公主長(zhǎng)得像智亮,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子点待,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,440評(píng)論 2 348

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