拒絕紙上談兵--萌新開發(fā)手冊(踩坑分享之項目基類與第三方庫抉擇)

1.項目基類

毫不夸張的說葛假,項目基類封裝的質(zhì)量決定你的開發(fā)速度,后期維護難易度藐不。不過估計很多萌新并沒有理解其中原因匀哄,那么我今天就來分析下,項目基類封裝的質(zhì)量有多重要雏蛮。
??首先通常來講涎嚼,入了門的安卓萌新們應(yīng)該都知道,項目中的activity和fragment必須要有統(tǒng)一的基類挑秉,也就是我們常說的BaseActivity和BaseFragment(連這個都沒有概念的同學法梯,恭喜你,連萌新都不算╮(╯▽╰)╭),那么為什么我們需要這兩個基類立哑?
??簡單來說BaseActivity和BaseFragment有利于我們對整個項目中所有activity和fragment的統(tǒng)一管理夜惭,舉個例子,界面跳轉(zhuǎn)铛绰,應(yīng)該沒人不會寫吧诈茧?通常我們會這么寫(看過我另一篇文章的同學都知道,我是主用mvp模式進行開發(fā)的捂掰,不過這里的講解敢会,我盡量以mvc為例):

傳送門:我的mvp框架
??為了減少敘述,下面同一以BaseActivity為例

   Intent intent = new Intent(this,LoginActivity.class);
   startActivity(intent);

有的同學可能就不懂了这嚣,這個和基類有什么關(guān)系鸥昏?我相信做過幾個項目的同學應(yīng)該都挺煩這個代碼的,為什么呢姐帚,因為這兩行代碼毫無營養(yǎng)吏垮,但是你每次跳轉(zhuǎn)界面卻又不得不寫,因為標準寫法就是這樣啊罐旗,有一定封裝經(jīng)驗的同學可能會想膳汪,這還不簡單,封裝個utils類唄尤莺,比如下面這樣:

    ActivityUtils.goActivity(this,LoginActivity.class);
    //======================================================
      public static <S extends Activity> void goActivity(Activity activity, Class<S> cls ){
        Intent intent = new Intent(activity,cls);
        activity.startActivity(intent);
    }
  

這樣寫相比每次都要自己去new Intent來說旅敷,確實好很多,但是在我看來還是不夠簡潔颤霎,如果我們在基類中添加一個方法媳谁,然后就可以簡單只傳入我們所必須的參數(shù)也就是我們所需要跳轉(zhuǎn)的類名,如下:

    goActivity(LoginActivity.class);
    //======================================================
      public  <S extends Activity> void goActivity( Class<S> cls ){
        Intent intent = new Intent(this,cls);
        startActivity(intent);
    }
  

這樣友酱,你會發(fā)現(xiàn)晴音,我們傳的參數(shù)真正做到了,只傳我們覺得需要傳的缔杉,不再需要重復的傳入this了锤躁,也許你會覺得僅僅一個this而已,但是首先或详,跳轉(zhuǎn)界面這個代碼在項目里少說也會出現(xiàn)幾十次系羞,多傳一個this,也就意味著你要多寫幾十次霸琴,其次椒振,這里只是以跳轉(zhuǎn)為例而已,還有更多復雜的場景梧乘。
??如果說上面這個簡單的例子還不能讓你直觀的明白基類的意義澎迎,那么我們再來一個例子庐杨,這次就不貼代碼了,我們以實際場景中的業(yè)務(wù)為例夹供,話說你寫好了一個項目灵份,現(xiàn)在突然需要在每個activity的onCreate初始化時額外加載一個第三方sdk的初始化方法,這個需求是很常見的哮洽,如果沒有基類也就意味著填渠,你需要每個activiy都去復制粘貼,然而有了統(tǒng)一基類時袁铐,你只需要去BaseActivity中的onCreate中加上這行代碼即可揭蜒,這也就是開始說的,方便對activity進行統(tǒng)一管理了剔桨。明白這點之后,為什么基類會影響開發(fā)速度和后期維護難易度徙融,相信你就應(yīng)該能想到了洒缀。
??說了基類的重要性,再來簡單說說該如何封裝欺冀,當然树绩,這里只介紹一些技巧,并不會為大家提供具體基類(如果確實需要例子的隐轩,請參考本人的mvp庫)饺饭,因為大家的項目千變?nèi)f化,而且開發(fā)習慣各異职车,想要都使用一個統(tǒng)一封裝基類是不太現(xiàn)實的瘫俊,這也是為什么幾乎沒有人開源關(guān)于BaseActivity的封裝框架,我們先來看一張圖:

毫無疑問悴灵,BaseActivity就是我們項目的頂層封裝基類扛芽,RefreshActivity和ListActivity從名字上就可以知道了,是基于頂層基類對特定功能的二次封裝积瞒,而RefreshWebActivity則是基于RefreshActivity的二次封裝川尖,真正的界面是下面那幾個。
??明顯的茫孔,DetailActivity是一個帶有刷新web功能的界面叮喳,MainActivity則是可以刷新的主頁面,GoodsListActivity是一個帶有列表的商品清單界面缰贝,LoginActivity是一個普通的界面馍悟,功能單一,直接繼承自BaseActivity揩瞪。這么設(shè)計的好處在哪里呢赋朦?像帶有列表的界面,對于一般的項目而言,通常少則出現(xiàn)幾次宠哄,多則十幾次幾十次壹将,這時如果我們直接繼承自BaseActivity就會造成,列表的邏輯重復寫很多次毛嫉。
??有人可能會提問诽俯,那直接把列表邏輯寫在BaseActivity不就好了,何必再弄一個ListActivity承粤?明確的說暴区,這么設(shè)計并不好,如果遇到一點通用功能就往BaseActivity里寫辛臊,可能等你的項目寫完仙粱,你的基類也就幾千行了,后面其他人來看彻舰,絕對想把你按在地上摩擦伐割。這也是為什么你會發(fā)現(xiàn)哪怕官方的Activity都有什么FramgmentActivity,AppCompatActivity等之類的區(qū)分了刃唤,合理的分散功能比強行寫在一起更容易讓其他人使用隔心。

封裝技巧:
  • 不要過度依賴繼承
    ??雖然上面已經(jīng)建議了分散功能進行封裝,但是尚胞,實踐中并不建議基類層次超過三層的設(shè)計硬霍,結(jié)構(gòu)過于復雜也會造成難于理解,不易維護笼裳。像上面的RefreshWebActivity已經(jīng)是處于第三層封裝了唯卖,所以不建議再繼承他進行基類封裝。不是過于復雜的功能侍咱,建議使用組合的方式來實現(xiàn)而不是僅僅通過繼承耐床,上面是以list功能為例,但是其實list的邏輯相對并不復雜楔脯,我們完全可以采用組合方式進行實現(xiàn)撩轰,這樣,如果我們的DetailActivity如果也需要list昧廷,只需要進行組合就好堪嫂。
  • 控制基類層級
    ??上面也說過了,盡量不要超出3層的基類封裝木柬,方便其他人協(xié)同開發(fā)和自己的日后維護皆串。通常也不可能超過3層結(jié)構(gòu),如果你超出了眉枕,請確認下自己的架構(gòu)設(shè)計恶复。
  • 封裝高頻代碼
    ??例如toast代碼怜森,本身很簡單,也就一行的事谤牡,但是相對來說副硅,它的使用頻率算是比較高的,而且需要傳的參數(shù)還是比較煩的翅萤,建議在基類封裝出方法恐疲,這樣以后想使用第三方toast庫,也會很容易修改套么。
  • 封裝復雜代碼
    ??比如彈窗的代碼培己,代碼行數(shù)其實還是偏多的,并且通常來說胚泌,一個應(yīng)用的彈窗樣式還是比較統(tǒng)一的省咨,沒必要到處實例化,直接在基類進行诸迟,可以更方便修改茸炒。
  • 不添加冗余代碼
    ??這里包括兩點,一是阵苇,廢棄的方法功能模塊,及時清理掉感论,避免其他人使用時無意中引用到绅项,造成以后清理時大面積報錯,二是比肄,不要添加某些小眾功能邏輯到基類快耿,比如某個特殊的業(yè)務(wù)邏輯功能,可能出現(xiàn)了3,5次的樣子你就往基類里寫芳绩,這樣違背了面向?qū)ο蟮脑瓌t掀亥,并且以后你想直接復制這個基類到其他項目用又要刪除這部分邏輯。

備注:上面主要是以activity為例妥色,但是只要你擁有了基類的思想搪花,不管是framgment還是adapter之類的,你都應(yīng)該能舉一反三了嘹害。

2.第三方庫抉擇

許多同學在使用第三方庫的時候總是很糾結(jié)撮竿,不知道該用哪個,這里我簡單介紹下我自己選擇第三方庫的一點點心得笔呀。

  • star數(shù)
    ??這點相信是大部分人都知道的一點幢踏,我們盡量避免使用github上只有個位數(shù)star的庫,不是說個位數(shù)star的庫都不好许师,而是對于萌新來說房蝉,別人的庫怎么樣僚匆,可能很難一眼看出來,這時候看star數(shù)就是最直觀的了搭幻,至于那些優(yōu)秀的個位數(shù)的star的庫咧擂,還是交給老司機去發(fā)掘吧,大家就不要作死了粗卜。
  • 查看issues詳情
    ??包括作者的解決效率屋确,大家反饋的一些問題和bug
  • 更新頻率
    ??留意下作者的更新頻率,如果是一兩年沒有更新的庫续扔,自己用之前最好能看下源碼攻臀,是否出了bug有把握能修復,當然建議還是使用更新頻率較高的庫(說明作者持續(xù)在關(guān)注)
  • 文檔
    ??使用別人的庫纱昧,文檔真的很重要(遇到好多萌新都是不看文檔刨啸,喜歡直接加群,去問別人识脆,這種習慣真的要盡快改掉)设联,不然遇到問題的話你可能只能聯(lián)系作者或者自己默默去看源碼了
  • 使用難易度
    ??有些庫可能是針對一些老鳥進行封裝的,所以使用起來會讓萌新們感覺不適應(yīng)灼捂,所以如果有替換的离例,可以考慮先放棄這個庫,等以后水平上升了再換悉稠。

總結(jié):不要只看star數(shù)宫蛆,star數(shù)不代表一切,要知道某寶已經(jīng)可以代刷star數(shù)了的猛,遇到很多個star數(shù)差不多的庫時耀盗,還是要綜合上面幾點多看看,自己評估一下用哪個

這次的分享就到此為止了卦尊,大家對我分享的東西有任何異議和問題的都歡迎提出叛拷。下次的分享暫內(nèi)容還沒想好,如果大家有什么想了解的岂却,也可以在評論中提出忿薇,我會考慮下次分享一下,持續(xù)更新淌友,歡迎大家關(guān)注

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末煌恢,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子震庭,更是在濱河造成了極大的恐慌瑰抵,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,542評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件器联,死亡現(xiàn)場離奇詭異二汛,居然都是意外死亡婿崭,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,596評論 3 385
  • 文/潘曉璐 我一進店門肴颊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來氓栈,“玉大人,你說我怎么就攤上這事婿着∈谑荩” “怎么了?”我有些...
    開封第一講書人閱讀 158,021評論 0 348
  • 文/不壞的土叔 我叫張陵竟宋,是天一觀的道長提完。 經(jīng)常有香客問我,道長丘侠,這世上最難降的妖魔是什么徒欣? 我笑而不...
    開封第一講書人閱讀 56,682評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮蜗字,結(jié)果婚禮上打肝,老公的妹妹穿的比我還像新娘。我一直安慰自己挪捕,他們只是感情好粗梭,可當我...
    茶點故事閱讀 65,792評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著级零,像睡著了一般楼吃。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上妄讯,一...
    開封第一講書人閱讀 49,985評論 1 291
  • 那天,我揣著相機與錄音酷宵,去河邊找鬼亥贸。 笑死,一個胖子當著我的面吹牛浇垦,可吹牛的內(nèi)容都是我干的炕置。 我是一名探鬼主播,決...
    沈念sama閱讀 39,107評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼男韧,長吁一口氣:“原來是場噩夢啊……” “哼朴摊!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起此虑,我...
    開封第一講書人閱讀 37,845評論 0 268
  • 序言:老撾萬榮一對情侶失蹤甚纲,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后朦前,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體介杆,經(jīng)...
    沈念sama閱讀 44,299評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡鹃操,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,612評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了春哨。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片荆隘。...
    茶點故事閱讀 38,747評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖赴背,靈堂內(nèi)的尸體忽然破棺而出椰拒,到底是詐尸還是另有隱情,我是刑警寧澤凰荚,帶...
    沈念sama閱讀 34,441評論 4 333
  • 正文 年R本政府宣布燃观,位于F島的核電站,受9級特大地震影響浇揩,放射性物質(zhì)發(fā)生泄漏仪壮。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,072評論 3 317
  • 文/蒙蒙 一胳徽、第九天 我趴在偏房一處隱蔽的房頂上張望积锅。 院中可真熱鬧,春花似錦养盗、人聲如沸缚陷。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,828評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽箫爷。三九已至,卻和暖如春聂儒,著一層夾襖步出監(jiān)牢的瞬間虎锚,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,069評論 1 267
  • 我被黑心中介騙來泰國打工衩婚, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留窜护,地道東北人。 一個月前我還...
    沈念sama閱讀 46,545評論 2 362
  • 正文 我出身青樓非春,卻偏偏與公主長得像柱徙,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子奇昙,可洞房花燭夜當晚...
    茶點故事閱讀 43,658評論 2 350

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

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,849評論 25 707
  • WebSocket-Swift Starscream的使用 WebSocket 是 HTML5 一種新的協(xié)議护侮。它實...
    香橙柚子閱讀 23,804評論 8 183
  • 雪戀上了花, 才來到了村落储耐, 那里沒有氣候的劇變羊初, 沒有車輪的碾壓, 可以在安靜的等待弧岳, 厚厚的純白凳忙, 化為一灘春...
    月亭閱讀 407評論 15 14
  • 《放學后》真的是一本很好看的小說业踏,小說迷題一換緊扣一環(huán),在燒腦的同時涧卵,卻又十分過癮勤家。然而在看完后又會忍不住靜下來思...
    還是那個阿堇閱讀 204評論 0 0
  • 背景 40歲,女柳恐,文員伐脖。《休息日》:周末晴朗的天乐设,女孩在門口草地上跳舞讼庇,家里爸媽在煮飯。玩累了就在樹下乘涼近尚,休息蠕啄。...
    藝凌老師閱讀 372評論 1 3