重構(gòu)

1.重復(fù)代碼 ==》同一個(gè)類的兩個(gè)函數(shù)含有相同的代碼(Extract Method)
===========》兩個(gè)互為兄弟的子類含有相同的表達(dá)式厅缺。(對(duì)兩個(gè)類都使用Extract Method,Pull Up Method再將它推入超類內(nèi))
如果代碼之間只是類似湘捎,并非完全相同,那么就得運(yùn)用Extract Method將相似部分和差異部分分割開舷胜,構(gòu)成單獨(dú)一個(gè)函數(shù)活翩。
============》如果是兩個(gè)毫不相關(guān)的類出現(xiàn)重復(fù)代碼,考慮對(duì)其中一個(gè)使用Extract Class 沮焕,將重復(fù)代碼提煉到一個(gè)獨(dú)立類中拉宗,然后在另外一個(gè)
類內(nèi)使用這個(gè)新類。
2.過(guò)長(zhǎng)函數(shù)====》百分之九十九的場(chǎng)合里魁巩,要把函數(shù)變小姐浮,只需使用Extract Method,找到函數(shù)中適合集中在一起的部分肾扰,將他們提煉出來(lái)形成一個(gè)新函數(shù)扫尖。
=====》對(duì)于函數(shù)內(nèi)有大量的參數(shù)和臨時(shí)變量掠廓,直接嘗試Extract Method 會(huì)把許多參數(shù)和臨時(shí)變量當(dāng)作參數(shù),傳遞給被提煉出來(lái)的新函數(shù)沉颂,導(dǎo)致
可讀性沒(méi)有提升悦污。可以用Replace Temp with Query.Introduce Parameter Object 和 Preserve Whole Oject彻坛。最后還有Replace Method with Method Object.
=======>條件表達(dá)式和循環(huán)常常也是提煉的信號(hào),運(yùn)用Decompose Conditional 處理?xiàng)l件表達(dá)式昌屉。
========》循環(huán)體间驮,將循環(huán)和其內(nèi)的代碼提煉到一個(gè)獨(dú)立函數(shù)中。

3.Large Class過(guò)大的類===》利用單獨(dú)的類做太多事情竞帽,會(huì)出現(xiàn)太多實(shí)例變量,一旦如此疙渣,重復(fù)代碼也就接踵而至堆巧。運(yùn)用Extract Class將幾個(gè)變量一起提煉至新類中,提煉應(yīng)該選擇
類內(nèi)彼此相關(guān)的變量懦冰,將它們放在一起谣沸。

  1. Long Parameter List過(guò)長(zhǎng)參數(shù)列表====》如果向已有的對(duì)象發(fā)出一條請(qǐng)求就可以取代一個(gè)參數(shù),那么你應(yīng)該激活重構(gòu)手法Replace parameter with Method内地。
    ====》運(yùn)用Preserve Whole Object 將來(lái)自同一對(duì)象的一堆數(shù)據(jù)收集起來(lái)赋除,并以該對(duì)象替換它們。
    ===》如果某些數(shù)據(jù)缺乏合理的對(duì)象歸屬荆针,可使用Introduce parameter Object為它們制造出一個(gè)參數(shù)對(duì)象颁糟。
    5.發(fā)散式變化:(在同一個(gè)類中修改多處)我們希望軟件能夠更容易被修改,修改的話只在該處修改玖媚,做不到婚脱,就有問(wèn)題勺像。因此找出某特定原因造成的所有變化错森,然后運(yùn)用Extract Class將它們提煉到另一個(gè)類中。

6.Shotgun Surgery(霰彈式修改)===》遇到某種變化督函,在不同類做許多小修改激挪。運(yùn)用Move Method和Move Field,把需要修改的代碼放進(jìn)同一個(gè)類宛篇。如果沒(méi)有合適的地方就創(chuàng)造一個(gè)薄湿。可運(yùn)用Inline Class把一系列相關(guān)
相關(guān)行為放進(jìn)同一個(gè)類吆倦。

7.Feature Envy依戀情結(jié)=====》函數(shù)對(duì)某個(gè)類的興趣高過(guò)對(duì)自己所處類的興趣坐求,用Move Method將它移到它該去的地方。

8.Data Clumps 數(shù)據(jù)泥團(tuán)===》常承肫蓿看到很多地方相同的三四項(xiàng)數(shù)據(jù):兩個(gè)類中相同的字段泛领,許多函數(shù)簽名中相同的參數(shù)。這些綁定在一起的數(shù)據(jù)真應(yīng)該擁有
屬于他們自己的對(duì)象绰更。運(yùn)用Extract Class將它們提煉到一個(gè)獨(dú)立對(duì)象中篓像。然后將注意力轉(zhuǎn)移到函數(shù)簽名上皿伺,運(yùn)用Introduce Parameter Object 或Preserve Whole Object為它減肥。

  1. Primitive Obsession 基本類型偏執(zhí)
    10 Switch Statements(Switch 驚悚現(xiàn)身) ====》用Extract Method將switch語(yǔ)句提煉到一個(gè)獨(dú)立函數(shù)中奠滑,再用Move Methdo搬移到多態(tài)性的那個(gè)類中。

具體:

  1. Inline Temp (內(nèi)聯(lián)臨時(shí)變量)====》你有一個(gè)臨時(shí)變量摊崭,只被一個(gè)簡(jiǎn)單表達(dá)式賦值一次杰赛,而它妨礙了其他重構(gòu)手法,將所有對(duì)該變量的引用動(dòng)作根时,替換為對(duì)它賦值的那個(gè)表達(dá)式自身辰晕。

  2. Replace Temp with Query (以查詢?nèi)〈R時(shí)變量)====》你的程序以一個(gè)臨時(shí)變量保存某一表達(dá)式的運(yùn)算結(jié)果。將這個(gè)表達(dá)式替換為對(duì)新函數(shù)的調(diào)用替裆。此后新函數(shù)就可以被其他函數(shù)使用窘问。

  3. Split Temporary Variable 分解臨時(shí)變量======》你的程序在某個(gè)臨時(shí)變量被賦值超過(guò)一次,它既不是循環(huán)變量胸遇,也不被用于收集計(jì)算結(jié)果汉形。針對(duì)每次賦值,創(chuàng)造一個(gè)獨(dú)立概疆、對(duì)應(yīng)的臨時(shí)變量。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末凯旭,一起剝皮案震驚了整個(gè)濱河市使套,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌嫉柴,老刑警劉巖奉呛,帶你破解...
    沈念sama閱讀 216,372評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異登馒,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)圈纺,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門赠堵,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)法褥,“玉大人,你說(shuō)我怎么就攤上這事揍愁∩倍” “怎么了?”我有些...
    開封第一講書人閱讀 162,415評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵朽缎,是天一觀的道長(zhǎng)谜悟。 經(jīng)常有香客問(wèn)我,道長(zhǎng)最筒,這世上最難降的妖魔是什么蔚叨? 我笑而不...
    開封第一講書人閱讀 58,157評(píng)論 1 292
  • 正文 為了忘掉前任蔑水,我火速辦了婚禮,結(jié)果婚禮上丹擎,老公的妹妹穿的比我還像新娘领曼。我一直安慰自己蛮穿,他們只是感情好毁渗,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評(píng)論 6 388
  • 文/花漫 我一把揭開白布灸异。 她就那樣靜靜地躺著羔飞,像睡著了一般。 火紅的嫁衣襯著肌膚如雪逻淌。 梳的紋絲不亂的頭發(fā)上卡儒,一...
    開封第一講書人閱讀 51,125評(píng)論 1 297
  • 那天,我揣著相機(jī)與錄音硬爆,去河邊找鬼擎鸠。 笑死,一個(gè)胖子當(dāng)著我的面吹牛袜蚕,可吹牛的內(nèi)容都是我干的绢涡。 我是一名探鬼主播,決...
    沈念sama閱讀 40,028評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼颠黎,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼滞项!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起过椎,我...
    開封第一講書人閱讀 38,887評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤疚宇,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后敷待,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,310評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評(píng)論 2 332
  • 正文 我和宋清朗相戀三年举哟,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了思劳。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,690評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡妨猩,死狀恐怖潜叛,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情壶硅,我是刑警寧澤威兜,帶...
    沈念sama閱讀 35,411評(píng)論 5 343
  • 正文 年R本政府宣布森瘪,位于F島的核電站,受9級(jí)特大地震影響扼睬,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜窗宇,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評(píng)論 3 325
  • 文/蒙蒙 一措伐、第九天 我趴在偏房一處隱蔽的房頂上張望军俊。 院中可真熱鬧侥加,春花似錦粪躬、人聲如沸担败。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至泳唠,卻和暖如春狈网,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評(píng)論 1 268
  • 我被黑心中介騙來(lái)泰國(guó)打工勇垛, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留士鸥,地道東北人闲孤。 一個(gè)月前我還...
    沈念sama閱讀 47,693評(píng)論 2 368
  • 正文 我出身青樓础淤,卻偏偏與公主長(zhǎng)得像哨苛,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子建峭,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評(píng)論 2 353

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