項(xiàng)目模塊重構(gòu)分享與思考

前言

背景

云盤產(chǎn)品端蛆,文件模塊的業(yè)務(wù)功能相對復(fù)雜,包含文件的顯示酥泛、排序今豆、篩選嫌拣、加密隱藏、批量移動(dòng)復(fù)制等功能晚凿。項(xiàng)目代碼可以追溯到14年以前亭罪,中間也有N多人的接手,目前還是存在非常多問題歼秽,維護(hù)及擴(kuò)展也是相對比較吃力应役。

最近由于產(chǎn)品功能正在策劃,大約有一周時(shí)間可以對項(xiàng)目進(jìn)行優(yōu)化燥筷。故決定對文件模塊進(jìn)行梳理重構(gòu)箩祥。在開始之前,這里先拋出幾個(gè)問題肆氓,相信大部分的同學(xué)也可能有類型的疑問袍祖,在文末的終結(jié)也會(huì)談一下自己的看法。

  1. 業(yè)務(wù)需求頻繁谢揪,開發(fā)功能都來不及蕉陋,哪里有時(shí)間進(jìn)行代碼重構(gòu)
  2. 公司并不看重代碼質(zhì)量,首先要滿足功能開發(fā)拨扶。重構(gòu)這個(gè)事情凳鬓,做了也不一定被認(rèn)同。等一下重構(gòu)后患民,產(chǎn)生新的問題缩举,后果更嚴(yán)重
  3. 這代碼改起來真是蛋疼,好幾個(gè)類功能都一樣匹颤,新增或者修改都需要改幾個(gè)地方仅孩。但是沒辦法,為了趕時(shí)間印蓖,暫時(shí)先這么干吧
  4. 想重構(gòu)辽慕,但是卻不知道如何下手。有時(shí)候有點(diǎn)空閑的時(shí)間另伍,又感覺不夠鼻百。所以一直沒有動(dòng)

文件模塊情況

簡單類關(guān)系圖

這里簡單介紹一些文件模塊目前的一些問題。先看一些類的關(guān)系圖摆尝。

image

類說明

說明
MyFileFragment 顯示文件及文件操作的Fragment
FileMainActivity 文件主頁面,依賴MyFileFragment
BaseList2Activity 文件列表基類因悲,顯示文件
MyFileActivity 作用和MyFileFragment相同堕汞,全局很多跳轉(zhuǎn)到文件頁面都是使用該類,繼承了BaseList2Activity
DiskMusicActivity 音樂模塊,從網(wǎng)盤導(dǎo)入音樂文件晃琳,是一個(gè)提供音樂文件選擇頁面讯检,繼承了MyFileActivity
AddAttachmentActivity 聊天模塊琐鲁,從網(wǎng)盤選擇圖片,是一個(gè)提供圖片文件選擇頁面人灼,繼承了MyFileActivity
DiskSearchActivity 文件搜索頁面围段,繼承了MyFileActivity
FileListBaseFragment 文件展示頁面,與BaseList2Activity類似
FileChooseActivity 網(wǎng)盤文件選擇頁面投放,是一個(gè)提供選擇文件頁面奈泪,依賴FileListBaseFragment

主要存在問題

在項(xiàng)目的開發(fā)維護(hù)工程中,主要存在的地方如下:

1灸芳、存在多個(gè)功能相似的頁面涝桅,例如MyFileFragment及MyFileActivity,功能高度相同烙样。全局跳轉(zhuǎn)到文件頁面使用了MyFileActivity冯遂,文件主入口使用了FileMainActivity。由于歷史原因谒获,一直維護(hù)著2個(gè)類蛤肌,新增功能和修改功能都要維護(hù)2個(gè)地方

2、文件列表顯示存在多個(gè)類批狱,BaseList2Activity裸准、FileListBaseFragment、MyFileFragment

3精耐、文件選擇也有多個(gè)頁面狼速,音樂選擇一個(gè)DiskMusicActivity、圖片選擇一個(gè)AddAttachmentActivity卦停、還有附件選擇一個(gè)FileChooseActivity

經(jīng)常出現(xiàn)產(chǎn)品加一個(gè)功能向胡,要幾個(gè)類修改,并且有時(shí)候修Bug容易遺漏地方惊完。

重構(gòu)

思路

在準(zhǔn)備開始動(dòng)手重構(gòu)之前僵芹,先梳理了一下思路。

1小槐、先搞清楚目前存在問題拇派,哪里不爽。分析解決問題的方案

2凿跳、盡量不要?jiǎng)拥皆械臉I(yè)務(wù)邏輯件豌,著重于結(jié)構(gòu)的升級

3、分解重構(gòu)執(zhí)行步驟控嗜,盡量細(xì)化成小任務(wù)茧彤,每個(gè)任務(wù)不相互影響。由于時(shí)間有限疆栏,爭取每完成一個(gè)小步驟的重構(gòu)曾掂,都能達(dá)到上線的狀態(tài)

執(zhí)行

根據(jù)目前存在的問題及重構(gòu)思路惫谤。本次重構(gòu)主要解決3個(gè)大問題。

1珠洗、在項(xiàng)目中要干掉MyFileActivity溜歪,統(tǒng)一使用MyFileFragment。不要再同時(shí)維護(hù)2個(gè)相同的功能的類

2许蓖、統(tǒng)一文件列表的顯示蝴猪,避免出現(xiàn)多個(gè)顯示文件的類

3、全局應(yīng)該統(tǒng)一一個(gè)文件選擇的頁面蛔糯。避免出現(xiàn)選擇音樂一個(gè)界面拯腮、選擇圖片一個(gè)界面、選擇附件又一個(gè)界面

階段一

階段一主要有優(yōu)化處理1蚁飒、2點(diǎn)动壤。這里先上一下簡單類結(jié)構(gòu)關(guān)系圖

image

1、將MyFileActivity移除淮逻,新增BridgeFileActivity(繼承了FileMainActivity)琼懊,替代MyFileActivity。將全局文件跳轉(zhuǎn)統(tǒng)一替換到BridgeFileActivity爬早,BridgeFileActivity最終依賴了MyFileFragment哼丈。這樣將文件主要操作的代碼統(tǒng)一在了MyFileFragment,避免維護(hù)多個(gè)相同功能的類筛严。

2醉旦、將文件的基礎(chǔ)顯示都FileListBaseFragment中,MyFileFragment繼承于它桨啃。MyFileFragment擴(kuò)展文件的操作功能车胡。如刪除、復(fù)制照瘾、移動(dòng)匈棘、加密等功能

3、由于MyFileActivity的移除析命,原繼承于它的DiskMusicActivity主卫、DiskSearchActivity等都需要進(jìn)行改造。重新定義DiskMusicFragment鹃愤、DiskSearchFragment繼承于MyFileFragment簇搅。將原來的Activity依賴于新定義的Fragment。

至此完成第一階段软吐,對原業(yè)務(wù)都未進(jìn)行修改馍资。只是將跳轉(zhuǎn)入口進(jìn)行替換。成功移除了MyFileActivity关噪。解決上述問題1鸟蟹、2。

階段二

階段二主要優(yōu)化第三點(diǎn)使兔,并且重新命名類名建钥。同樣先上下簡單類結(jié)構(gòu)關(guān)系圖

image

1、對FileChooseActivity進(jìn)行擴(kuò)展虐沥,使用Builder模式進(jìn)行配置熊经,支持文件類型的篩選顯示。廢除DiskMusicActivity欲险、AddAttachmentActivity镐依。

音樂篩選頁面代碼跳轉(zhuǎn):

 FileChooseActivity.IntentBuilder builder = new FileChooseActivity.IntentBuilder(this);
        builder.setChoiceMode(ChoiceMode.MULTI)
                .setEventBusFlag(Signature.signature(this))
                .setShowLocalFileList(false)
                .setYywSelectType(FileChoiceParams.MUSIC)
                .setSupportCheckAll(true)
                .launch();

圖片篩選頁面代碼跳轉(zhuǎn):

 FileChooseActivity.IntentBuilder builder = new FileChooseActivity.IntentBuilder(this);
        builder.setChoiceMode(ChoiceMode.MULTI)
                .setEventBusFlag(Signature.signature(this))
                .setShowLocalFileList(false)
                .setMaxLimit(15)
                .setYywSelectType(FileChoiceParams.PIC)
                .setSupportCheckAll(false)
                .launch();

總結(jié)

回到一開始拋出的問題,這里做一下自己的總結(jié)思考天试。

1槐壳、業(yè)務(wù)需求多,時(shí)間趕這是常態(tài)喜每,時(shí)間要靠自己規(guī)劃及提高效率擠出來务唐。在開發(fā)的時(shí)候也要充分考慮,不能盲目追求功能實(shí)現(xiàn)带兜。 一般項(xiàng)目上線后枫笛,新功能策劃都有一段空白期,善于利用

2刚照、不管公司重不重視代碼重構(gòu)刑巧。首先多思考、優(yōu)化重構(gòu)无畔,對自己也是一種提升啊楚。相信在重構(gòu)的過程,自己也可以有所收獲

3檩互、項(xiàng)目存在種種的歷史遺留問題特幔,有時(shí)候重構(gòu)與不重構(gòu)就是一個(gè)長痛和短痛的取舍。自己負(fù)責(zé)的模塊代碼不優(yōu)化闸昨,加需求蚯斯,改Bug,最終坑的還是自己

4饵较、項(xiàng)目重構(gòu)是不斷演化的過程拍嵌,沒有一蹴而就。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末循诉,一起剝皮案震驚了整個(gè)濱河市横辆,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌茄猫,老刑警劉巖狈蚤,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件困肩,死亡現(xiàn)場離奇詭異,居然都是意外死亡脆侮,警方通過查閱死者的電腦和手機(jī)锌畸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來靖避,“玉大人潭枣,你說我怎么就攤上這事』媚螅” “怎么了盆犁?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長篡九。 經(jīng)常有香客問我谐岁,道長,這世上最難降的妖魔是什么瓮下? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任翰铡,我火速辦了婚禮,結(jié)果婚禮上讽坏,老公的妹妹穿的比我還像新娘锭魔。我一直安慰自己辛臊,他們只是感情好劈彪,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布臭胜。 她就那樣靜靜地躺著雌贱,像睡著了一般睹逃。 火紅的嫁衣襯著肌膚如雪碱妆。 梳的紋絲不亂的頭發(fā)上懈息,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天罕扎,我揣著相機(jī)與錄音抵屿,去河邊找鬼庆锦。 笑死,一個(gè)胖子當(dāng)著我的面吹牛轧葛,可吹牛的內(nèi)容都是我干的搂抒。 我是一名探鬼主播,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼尿扯,長吁一口氣:“原來是場噩夢啊……” “哼求晶!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起衷笋,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤芳杏,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體爵赵,經(jīng)...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡吝秕,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了亚再。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片郭膛。...
    茶點(diǎn)故事閱讀 38,622評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖氛悬,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情耘柱,我是刑警寧澤如捅,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站调煎,受9級特大地震影響镜遣,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜士袄,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一悲关、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧娄柳,春花似錦寓辱、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至挎挖,卻和暖如春这敬,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背蕉朵。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工崔涂, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人始衅。 一個(gè)月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓冷蚂,卻偏偏與公主長得像,于是被迫代替她去往敵國和親觅闽。 傳聞我的和親對象是個(gè)殘疾皇子帝雇,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,490評論 2 348

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

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,756評論 25 707
  • 馬云拿下美國歐洲日本!沸騰全中國蛉拙! 史無前例尸闸!今天,馬云又完成了三場顛覆,每一場都直擊要害吮廉,每一場都前所未有苞尝,每一...
    展筠閱讀 425評論 0 0
  • 柳飛鶯啼夜隔門, 寒枕難夢歌不成宦芦。 山盟若非隨風(fēng)散宙址, 月明豈無把盞人。
    君子于役者閱讀 137評論 0 2
  • 這兩天的沙盤課程我想最終將會(huì)成為我人生道路中一個(gè)里程碑。這兩天就像照了一面神奇的鏡子恬涧,照出了現(xiàn)在的我與以前不...
    萱婷cb閱讀 207評論 0 2