從 MVP學(xué)習(xí)代碼封裝 (1) - 綜述

我的心聲

做 android 時間不算短了闽坡,雖說 android 的 api 基本都熟悉了伶贰,但是自己寫出來的 java 還是菜的可以啊。痛定思痛娃肿,急需夯實 java 基礎(chǔ)了咕缎。在平時的學(xué)習(xí)和工作中是可以明顯的體會到 java 基礎(chǔ)的重要啊珠十,你看開源的網(wǎng)絡(luò)框架,自己寫多線程任務(wù)凭豪,有其是自己封裝基礎(chǔ)類庫焙蹭,業(yè)務(wù)代碼,工具類等都是深深到自己 java 這塊的代碼是在是太欠缺了嫂伞。雖然知道一些代碼封裝的點孔厉,但是為啥這樣寫,應(yīng)該怎么分析帖努,復(fù)雜一些的業(yè)務(wù)模塊該怎么設(shè)計類撰豺,怎么封裝,這都是我做不好的拼余。曾經(jīng)寫過日志和埋點的業(yè)務(wù)模塊污桦,當(dāng)時感覺把自己會的都用上了,現(xiàn)在在回頭一看匙监,不倫不類凡橱,封裝的不好用,不好維護亭姥,邏輯都是扭過來的梭纹,太難看了。

有感于此致份,從這幾天開始研究如何封裝代碼,在學(xué)習(xí)的過程中础拨,我認(rèn)知到代碼的封裝的思想大部分源于設(shè)計模式氮块,基礎(chǔ)的有23種設(shè)計模式,還有更多的設(shè)計模式種類诡宗,基本的我們能把基礎(chǔ)的23種設(shè)計模式用好就很 NB 了滔蝉。

啥是設(shè)計模式,就是根據(jù)經(jīng)驗總結(jié)出來的代碼封裝使用套路塔沃,這些套路是經(jīng)過長時間沉淀下來的蝠引,是大家公認(rèn),都去學(xué)習(xí)使用的蛀柴。用設(shè)計模式的思想封裝出來的代碼螃概,我是的確感覺比之前自己野路子強太多了:

  • 首先代碼結(jié)構(gòu)清晰多了,類名起好了鸽疾,光看看包結(jié)構(gòu)就能大概了解整個系統(tǒng)的代碼結(jié)構(gòu)吊洼,哪些類是干什么的,起什什么作用制肮,真是一眼就能看出來了冒窍,省時省力
  • 結(jié)構(gòu)清晰了递沪,代碼可以快速定位,大大減少代碼維護修改的難度综液。不像之前款慨,改些代碼,需要根據(jù)邏輯一步一步的走谬莹,才能找到修改的類檩奠,修改的位置
  • 結(jié)構(gòu)清晰了,類之間功能劃分才能做到清晰明確届良,修改邏輯笆凌,增加功能可以很快的實現(xiàn)代碼的修改,類士葫,功能乞而,方法的添加

總的來說就是寫代碼,看代碼慢显,改代碼爪模,添代碼省時省力多了,眼不暈了荚藻,頭部疼了屋灌,從此媽媽再也不擔(dān)心我寫代碼了。真的应狱,效果就是這么顯著共郭,就是去研究開源框架,都是好理解好多了疾呻,因為大家都是遵從同一套思路除嘹,這就是所謂的套路...... 我一直覺得代碼的世界充斥著各種套路,我們學(xué)習(xí)使用這些套路岸蜗,就是我們快速進步的思路尉咕。


學(xué)習(xí)過程

這里我說下我代碼封裝學(xué)習(xí)的過程,代碼封裝是個不小的命題啊璃岳,除了需要平時的積累外年缎,還需要一個正確的學(xué)習(xí)過程,這里說下我的經(jīng)驗:

  1. 先去學(xué)習(xí)下基礎(chǔ)知識铃慷,設(shè)計模式单芜,MVP。設(shè)計模式是我們代碼封裝的基礎(chǔ)犁柜,理論指導(dǎo)缓溅,基礎(chǔ)中最重要的部分。MVP 是我們學(xué)習(xí)的入手點赁温,是做 andriod 項目必備必會坛怪,最應(yīng)該先深入學(xué)習(xí)的部分淤齐。

    • 先去看設(shè)計模式,我是看的《Android 進階之光》這本書的設(shè)計模式章節(jié)袜匿,里面只講了常用的10來種設(shè)計模式更啄,講的都是很淺顯,但是好理解居灯,這是之前沒有系統(tǒng)接觸過設(shè)計模式的萌新的不二選擇祭务。我看過一遍就 OK 了,對我?guī)椭艽蠊窒樱?dāng)然這本書講的太過于淺顯义锥,易懂了。大家想要繼續(xù)深入學(xué)習(xí)岩灭,看《Android設(shè)計模式》這本書拌倍,這本書講的很深,會結(jié)合很多例子來講解噪径,有其是套用設(shè)計模式的思路去分析 部分android 經(jīng)典源碼
    • 既然我們是結(jié)合 MVP 來一步步深入學(xué)習(xí)柱恤,實踐代碼封裝,那么看過設(shè)計模式之后呢找爱,我們就來看看 MVP/MVVM 的相關(guān)梗顺,對于萌新來說還是推薦《Android 進階之光》這本書,MVP 講的很請清晰车摄,MVVM 里面我們會接觸到 Dat a Binding寺谤,Dagger2,有其這2個開源框架對于代碼封裝來說也是很重要的組成部分吮播。
  2. 基礎(chǔ)知識學(xué)習(xí)過后矗漾,我們按照從易到難的順序開始寫我們自己的 MVP 框架。

項目地址 - BW-MVPDemo

2.1 我們先來搭建 MVP 中最基礎(chǔ)薄料,最簡單的基礎(chǔ)顯示框架部分,先不要管各種功能泵琳,只要我們的頁面能在 MVP 框架結(jié)構(gòu)支持下正常顯示即可摄职,這部分是示例項目中 step1的部分,期中分成7個小項目获列,是根據(jù)代碼封裝的思路一步一步的寫下來的谷市,盡量模擬出代碼封裝從易到難的過程,希望幫到有困難的朋友

2.2 基礎(chǔ)顯示接結(jié)構(gòu)搭建完畢击孩,我們就要考慮如何封裝 MVP 中涉及到的諸多功能迫悠,比如:生命周期函數(shù),statview 缺省頁巩梢,頁面緩存等常用的功能创泄。這里就要用到組合的思路了艺玲,我們可以把 MVP 當(dāng)做一個完整的系統(tǒng),生命周期函數(shù)鞠抑,statview 缺省頁饭聚,頁面緩存這些功能是 MVP 這個系統(tǒng)中的子系統(tǒng),我們根據(jù)模式和代碼設(shè)計模式的思路搁拙,抽象功能接口秒梳,組合這個小功能到 MVP 中,形成一個完整的系統(tǒng)箕速,未來設(shè)計到某一個功能的修改和擴展也不影響MVP 中其他的部分酪碘,也容易修改。

  • 項目 step2_1:封裝的生命周期函數(shù)功能盐茎,主要是整合處理 view 中生命周期函數(shù)中可變的部分給 P 層兴垦,讓具體的 P 層對象來實現(xiàn)具體的代碼,是模板模式的思路庭呜,基類中處理公共邏輯滑进,具體實現(xiàn)處理可變部分,是優(yōu)秀合理的代碼分離思路募谎,這對我們以后是很有幫助的扶关,這個思路在 android 項目中使用的例子太多了。
  • 項目 step2_2:封裝 stateview 功能数冬,這里使用了代理設(shè)計模式的思路节槐,展示狀態(tài)頁本就是 view 該干的事,這里我們把這部分功能從 view 中分離出來的拐纱,形成單獨實現(xiàn)铜异,把功能對象傳遞給 view,由 view 去使用這個 stateview 功能對象實現(xiàn)邏輯秸架。好處是易擴展揍庄,要是 stateview 需求不同的話,我們只需要更換 stateview 對象即可东抹,然不用修改其他蚂子。

我理解的 MVP

MVP 是 MVC 的金進化版,一般認(rèn)為是 Android 特有的缭黔,其實很早之前就提出來的食茎,并非是有了 android 才提出來的

MVC:

  • M - modle 數(shù)據(jù)層
  • V - view 視圖層
  • C - Avtivity/Fragment 控制層

MVC 的模式都是最早的 android 開發(fā)寫法,商業(yè)app 12年就不在再用了馏谨,是在弊端太多别渔,是早期的特征

MVP:

  • M - modle 數(shù)據(jù)層
  • V - Avtivity/Fragment 視圖層
  • P - Persenter 控制層
20150512093237114.png

經(jīng)典的就是 google 官方的例子了,把頁面中邏輯控制抽象出來形成新的控制器 P,但是 P 也頁不是救命稻草啊哎媚,傳統(tǒng) V 層的代碼膨脹的嚴(yán)重喇伯,我們把邏輯抽象出來成 P,難倒 P 的邏輯就精簡了抄伍,代碼該臃腫還是臃腫啊艘刚,只是從 V 層轉(zhuǎn)移到了 P 層,所以說 MVP 不是救命稻草截珍,真正實現(xiàn)我們想要的代碼經(jīng)驗攀甚,邏輯清晰的效果,只能是在設(shè)計模式的指導(dǎo)下岗喉,以策略模式為思想秋度,抽象分割頁面中的各種功能,抽象出相應(yīng)的接口钱床,由獨立的功能類實現(xiàn)荚斯,這樣才能把結(jié)構(gòu)臃腫的 P 層,抽象分割成一個個功能聚攏查牌,獨立的功能類事期,通過繼承,接口實現(xiàn)來搭建頁面系統(tǒng)的類結(jié)構(gòu)纸颜。這樣一個基礎(chǔ)優(yōu)秀的頁面框架才能形成兽泣。

小到 android 中簡單的頁面框架,大道各種業(yè)務(wù)模塊胁孙,基礎(chǔ)功能框架類庫唠倦,都是在這個基礎(chǔ)套路下寫的。

說真的涮较,設(shè)計模式太重要了稠鼻,但是也有人說不能因為設(shè)計模式而設(shè)計模式,誠然這個看自己的技術(shù)水平吧狂票,設(shè)計模式也是為了解決實際問題的候齿,一切以實現(xiàn)需求和效果為準(zhǔn)啊,設(shè)計模式是思想闺属,不要太死板的使用慌盯,我們只要使用了設(shè)計模式的思路就行,具體的代碼套路就只能完全看自己的積累了屋剑。

另外 UML 類圖的繪制技能也是很有幫助的,尤其是自己設(shè)計框架結(jié)構(gòu)诗眨,平時沒事可以自己畫 UML 類圖的方式練習(xí)框架設(shè)計唉匾,省時省力。學(xué)習(xí)開源框架時畫 UML 類圖也是一個學(xué)習(xí)的突破口,可以幫助我們快速搞懂開源框架

我很喜歡這一段評價 MVP 的話巍膘,取自:T-MVP

Android開發(fā)中厂财,總會遇到大量的繁雜模版代碼,重復(fù)無味的樣板方法峡懈,冗長雜余的套路寫法璃饱,占據(jù)了大量的開發(fā)時間,并且容易手誤出錯肪康,極大地降低了編程效率和代碼的優(yōu)雅荚恶。

傳統(tǒng)MVP給人的第一感覺通常是接口和類的暴漲,將Activity中除V之外的繁雜操作搬到P之后依然臃腫不堪磷支。MVP從來都不是救命稻草谒撼,只能錦上添花,不能雪中送炭雾狈。也許在權(quán)衡利弊之后廓潜,很多人會對MVP望而卻步。 現(xiàn)在 我們換一個思路善榛,取其精華辩蛋,去其糟粕,完成T-MVP大變身移盆。


學(xué)習(xí)文章目錄:

ps: 項目地址 - BW-MVPDemo


參考資料:

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末悼院,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子味滞,更是在濱河造成了極大的恐慌樱蛤,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,744評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件剑鞍,死亡現(xiàn)場離奇詭異誓琼,居然都是意外死亡,警方通過查閱死者的電腦和手機涮瞻,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,505評論 3 392
  • 文/潘曉璐 我一進店門搀暑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人光戈,你說我怎么就攤上這事哪痰。” “怎么了久妆?”我有些...
    開封第一講書人閱讀 163,105評論 0 353
  • 文/不壞的土叔 我叫張陵晌杰,是天一觀的道長。 經(jīng)常有香客問我筷弦,道長肋演,這世上最難降的妖魔是什么抑诸? 我笑而不...
    開封第一講書人閱讀 58,242評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮爹殊,結(jié)果婚禮上蜕乡,老公的妹妹穿的比我還像新娘。我一直安慰自己梗夸,他們只是感情好层玲,可當(dāng)我...
    茶點故事閱讀 67,269評論 6 389
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著反症,像睡著了一般辛块。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上惰帽,一...
    開封第一講書人閱讀 51,215評論 1 299
  • 那天憨降,我揣著相機與錄音,去河邊找鬼该酗。 笑死授药,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的呜魄。 我是一名探鬼主播悔叽,決...
    沈念sama閱讀 40,096評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼爵嗅!你這毒婦竟也來了娇澎?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,939評論 0 274
  • 序言:老撾萬榮一對情侶失蹤睹晒,失蹤者是張志新(化名)和其女友劉穎趟庄,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體伪很,經(jīng)...
    沈念sama閱讀 45,354評論 1 311
  • 正文 獨居荒郊野嶺守林人離奇死亡戚啥,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,573評論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了锉试。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片猫十。...
    茶點故事閱讀 39,745評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖呆盖,靈堂內(nèi)的尸體忽然破棺而出拖云,到底是詐尸還是另有隱情,我是刑警寧澤应又,帶...
    沈念sama閱讀 35,448評論 5 344
  • 正文 年R本政府宣布宙项,位于F島的核電站,受9級特大地震影響株扛,放射性物質(zhì)發(fā)生泄漏尤筐。R本人自食惡果不足惜邑贴,卻給世界環(huán)境...
    茶點故事閱讀 41,048評論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望叔磷。 院中可真熱鬧,春花似錦奖磁、人聲如沸改基。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,683評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽秕狰。三九已至,卻和暖如春躁染,著一層夾襖步出監(jiān)牢的瞬間鸣哀,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,838評論 1 269
  • 我被黑心中介騙來泰國打工吞彤, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留我衬,地道東北人。 一個月前我還...
    沈念sama閱讀 47,776評論 2 369
  • 正文 我出身青樓饰恕,卻偏偏與公主長得像挠羔,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子埋嵌,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,652評論 2 354

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

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,083評論 25 707
  • 沒那么簡單破加,就能找到適合自己的萃取圖,不過勇敢邁出這一步雹嗦,總比原地踏步好
    青春的影子0717閱讀 258評論 5 2
  • 致青春(一) 譚惜之 致我剛剛逝去的一年的青春 致我總能苦中作樂的外教...
    譚惜之閱讀 474評論 2 3
  • 2017-10-2凌晨 我有一個錄制一系列點臺(我的荔枝電臺:FM1805591)”激活僵尸粉范舀,建立自己的私人金礦...
    朋友圈文案女王閱讀 997評論 0 0
  • 這是一篇推歌的文章哦~ 推歌前bb:到暑假后期捶惜,也收獲了一張長長的歌單田藐。考研狗在暑假非常的焦躁吱七,因此聽歌的風(fēng)格跟之...
    聽你的聲音閱讀 553評論 0 3