了解重構(gòu)

了解重構(gòu)

什么是重構(gòu)今艺?

“重構(gòu)”一詞想必大家耳熟能詳,就是整理代碼唄爵卒,可事實上并不是這樣的虚缎。重構(gòu)旨在不改變調(diào)用者行為的前提下,對內(nèi)部邏輯進行調(diào)整優(yōu)化钓株,從而提高其理解性实牡,降低其修改成本。

何時重構(gòu)享幽?

重構(gòu)并不是單獨抽出時間集中處理的铲掐,而是當你想要做某個功能時拾弃,應(yīng)該隨手把需要重構(gòu)的地方重構(gòu)了值桩。

怎么重構(gòu)?

抽象重復邏輯

重復代碼是最核心常見的預警信息豪椿,如果有兩個或兩個以上的重復邏輯的代碼奔坟,就應(yīng)該考慮將其合并携栋。例如,同一類或不同類中的方法如果存在邏輯相同的部分咳秉,就應(yīng)該把相同部分抽象為獨立的方法或類婉支。

分解長方法

當很多人閱讀別人數(shù)百行甚至上千行的代碼后,讓人懷疑人生澜建。為方便理解向挖,最好的方式是把長方法分解為若干小方法,搭配上易理解的方法名炕舵,便可以像自然語言一樣理解代碼何之。

減少參數(shù)

有一種習慣非常不好,就是把所有要用到的變量當做方法的參數(shù)咽筋,這樣會加劇代碼的理解難度溶推,對內(nèi)容的拓展極其困難,當需要更多數(shù)據(jù)時奸攻,不得不修改所有方法的參數(shù)蒜危,牽一發(fā)動全身。如果把對象作為參數(shù)睹耐,把需要用到的數(shù)據(jù)都放進對象里辐赞,就可以有效解決參數(shù)過長的問題。

方法出軌

你要是發(fā)現(xiàn)一個方法頻繁的調(diào)用某一個類硝训,它很可能給你戴了綠帽子占拍,不如忍痛割愛,放其自由吧捎迫,把方法歸并到它喜歡的類晃酒,也許他們在一起生活更為合適,你一定會找到一個適合的人窄绒。

抽取變化

如果新加入一個業(yè)務(wù)類型(例如支付渠道贝次、數(shù)據(jù)庫類型等)時,需要改動很多地方才能實現(xiàn)彰导,這就意味著還有改進的空間蛔翅,可以將引起變化的原因抽出來做為配置,并將變化的方法放置到一個類中位谋,這樣不僅可以做到修改一處就應(yīng)對變化山析,還可以很清晰的知道方法會受到影響。

組合工具類

一款語言包含很多基本類型與內(nèi)置方法掏父,但不能滿足所有需求笋轨,比如金額單位轉(zhuǎn)換、時間數(shù)組格式轉(zhuǎn)換、UUID生成等簡單又容易忽略的小功能爵政,如果這些功能出現(xiàn)的頻率很高仅讽,規(guī)則改變會帶來一連串的修改,這時可以考慮將這些小功能抽象為工具方法钾挟,并將這些方法組合為工具類洁灵。

意淫的功能

有些邏輯以為將來會有一些變化,于是安插了很多鉤子方法應(yīng)對非必要的特殊情況掺出,這樣往往提高了系統(tǒng)復雜性和理解成本徽千,如果安插的鉤子都能被用到且有價值,那么就使用汤锨,否則還是不要放在代碼里阻礙視線了罐栈。

減少switch

假如現(xiàn)在要做一個支持微信、支付寶泥畅、招行等渠道的支付平臺荠诬,需要對接不同渠道,因為不同渠道對接方式不同位仁,就需要用switch來根據(jù)類型選擇對應(yīng)渠道的對接方式柑贞,但是很多地方都可能用到這個switch,一旦新渠道加入就要滿世界的找哪里用到了switch聂抢。

可以將switch語句移植為獨立的方法钧嘶,將這些方法組成基類,case語句調(diào)用子類對應(yīng)的方法琳疏,具體實現(xiàn)讓子類去完成有决,這樣支付渠道的增加和變更只需要修改一個類即可。

去掉無用類

創(chuàng)建的每一個類空盼,對于其他人來講都是有理解成本的书幕,如果曾經(jīng)為某個變化所添加的類,在實際場景中并沒有發(fā)生變化揽趾,那么就把這個類去掉吧台汇,我們需要真正有價值、理解成本低的系統(tǒng)篱瞎。

一個類會設(shè)置一些為特殊情況設(shè)置的變量苟呐,這些變量不一定都會被使用,經(jīng)手你代碼的人還要猜測當時設(shè)置這些變量的目的俐筋,非常讓人頭大牵素,不如把這些變量和相關(guān)方法單獨放在一個類中,屏蔽具體細節(jié)澄者,需要的功能通過方法來表達笆呆,會使功能擴展更高效请琳。

去掉“幽靈類”

項目中偶爾會出現(xiàn)一些“幽靈類”,這些類沒有做什么實際工作腰奋,只是負責調(diào)用其它的類单起,不如把這個“中間人”去掉抱怔,讓實際要調(diào)用的那個類與調(diào)用者發(fā)生關(guān)系劣坊。

抽象相同類為基類

如果兩個類,其中某幾個方法作用相同屈留,名稱不同局冰,那就可以通過修改名稱或移植方法的方式將兩個相似的類保持一致,然后把兩個類抽象出基類灌危,以便擴展康二。

增加注釋

注釋多并不是一件壞事,它是重構(gòu)的領(lǐng)路人勇蝙,當你感覺需要為某段代碼寫上注釋時沫勿,這意味著你認為這段代碼不容易被他人理解,也側(cè)面證明了這就是重構(gòu)發(fā)出的預警信號味混,所以當想要寫注釋時产雹,就先重構(gòu),爭取讓注釋都變得多余翁锡。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蔓挖,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子馆衔,更是在濱河造成了極大的恐慌瘟判,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,185評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件角溃,死亡現(xiàn)場離奇詭異拷获,居然都是意外死亡,警方通過查閱死者的電腦和手機减细,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評論 3 393
  • 文/潘曉璐 我一進店門刀诬,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人邪财,你說我怎么就攤上這事陕壹。” “怎么了树埠?”我有些...
    開封第一講書人閱讀 163,524評論 0 353
  • 文/不壞的土叔 我叫張陵糠馆,是天一觀的道長。 經(jīng)常有香客問我怎憋,道長又碌,這世上最難降的妖魔是什么九昧? 我笑而不...
    開封第一講書人閱讀 58,339評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮毕匀,結(jié)果婚禮上铸鹰,老公的妹妹穿的比我還像新娘。我一直安慰自己皂岔,他們只是感情好蹋笼,可當我...
    茶點故事閱讀 67,387評論 6 391
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著躁垛,像睡著了一般剖毯。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上教馆,一...
    開封第一講書人閱讀 51,287評論 1 301
  • 那天逊谋,我揣著相機與錄音,去河邊找鬼土铺。 笑死胶滋,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的悲敷。 我是一名探鬼主播究恤,決...
    沈念sama閱讀 40,130評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼镀迂!你這毒婦竟也來了丁溅?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,985評論 0 275
  • 序言:老撾萬榮一對情侶失蹤探遵,失蹤者是張志新(化名)和其女友劉穎窟赏,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體箱季,經(jīng)...
    沈念sama閱讀 45,420評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡涯穷,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,617評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了藏雏。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片拷况。...
    茶點故事閱讀 39,779評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖掘殴,靈堂內(nèi)的尸體忽然破棺而出赚瘦,到底是詐尸還是另有隱情,我是刑警寧澤奏寨,帶...
    沈念sama閱讀 35,477評論 5 345
  • 正文 年R本政府宣布起意,位于F島的核電站,受9級特大地震影響病瞳,放射性物質(zhì)發(fā)生泄漏揽咕。R本人自食惡果不足惜悲酷,卻給世界環(huán)境...
    茶點故事閱讀 41,088評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望亲善。 院中可真熱鬧设易,春花似錦、人聲如沸蛹头。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽掘而。三九已至挟冠,卻和暖如春于购,著一層夾襖步出監(jiān)牢的瞬間袍睡,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評論 1 269
  • 我被黑心中介騙來泰國打工肋僧, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留斑胜,地道東北人。 一個月前我還...
    沈念sama閱讀 47,876評論 2 370
  • 正文 我出身青樓嫌吠,卻偏偏與公主長得像止潘,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子辫诅,可洞房花燭夜當晚...
    茶點故事閱讀 44,700評論 2 354

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

  • chapter 1 重構(gòu)凭戴,第一個案例 1.1 什么時候需要重構(gòu) 需要為程序添加一個特性,但代碼結(jié)構(gòu)無法使自己方便的...
    VictorBXv閱讀 2,033評論 0 1
  • 《重構(gòu)》讀書筆記 總覽 第一部分 第一章從實例程序出發(fā)炕矮,展示設(shè)計的缺陷么夫,對其重構(gòu)可以了解重構(gòu)的過程和方法。 第二部...
    白樺葉閱讀 2,397評論 2 5
  • 可以先看【推薦】:http://www.reibang.com/p/d6ff54d72afb原文:http://...
    郭某人1閱讀 1,845評論 0 0
  • 一肤视,重構(gòu)档痪,第一個案例 這一章作者先用一個影片出租程序的案例,來演示重構(gòu)的過程 每個Customer顧客可以租多部M...
    高稷閱讀 10,814評論 1 19
  • 曾幾何時邢滑,發(fā)現(xiàn)這個世界好多的東西在變腐螟,唯一不變的是我的初心,很慶幸自己在這個物欲橫流的世界困后,自己還保持自己...
    Zhangecho閱讀 151評論 0 0