【讀書筆記】重構(gòu)改善既有代碼的設(shè)計

重構(gòu)改善既有代碼的設(shè)計

在日常的編碼過程中沐绒,這些知識點可能是非常容易忽視或者由于編碼習(xí)慣而出差錯的地方

軟件工程的意義:希望建立完美的需求與設(shè)計俩莽,按照既有的規(guī)編寫標(biāo)準(zhǔn)劃一的代碼,這是結(jié)構(gòu)的美乔遮;快速迭代和RAD顛覆“全知全能”神話扮超,用近乎刀劈斧砍的方式解決問題,在混沌的循環(huán)往復(fù)中實現(xiàn)需求蹋肮,這是解構(gòu)的美出刷。

Duplicated Code(重復(fù)代碼)

  • 程序中兩段代碼極度類似
  1. 判斷是否表達的含義是否一致。
  2. 是否在別的地方進行引用
  3. 將其合并為一個類中的一個函數(shù)坯辩,通過調(diào)用來實現(xiàn)功能簡化代碼復(fù)用馁龟。
  • 對于重復(fù)代碼,需要提煉者認(rèn)真思考漆魔,提煉后的函數(shù)放在那個位置更合適坷檩,保證函數(shù)的唯一性。

Long Method(過長函數(shù))

  • 避免程序中的函數(shù)(方法)過長
  1. 短函數(shù)對象好理解有送,容易閱讀淌喻,美觀帶來的全部利益:
  2. 解釋能力,共享能力雀摘,選擇能力
  • 設(shè)計短函數(shù)的原則
  1. 每當(dāng)感覺需要以注釋來解釋來說明點什么的時候裸删,就把需要說明的東西寫道一個獨立的函數(shù)中,并以其用途命名阵赠。
  2. 關(guān)鍵不在于函數(shù)的長度涯塔,而在于函數(shù)“做什么”肌稻、“如何做”之間的語義距離
  • 如何設(shè)計短函數(shù)
  1. 尋找注釋

注釋能表達出此函數(shù)的具體含義,體現(xiàn)代碼用途和實現(xiàn)手法之間的語義距離;

哪怕是在函數(shù)中的一句注釋匕荸,如果此注釋只是用來說明的爹谭,也有必要將其設(shè)計提煉成一個單獨的函數(shù)

  1. 注意條件表達式和循環(huán)程序

Large Class(過大的類)

  1. 注意那些做太多事情的單個類,他們很可能就是過大的類
  2. 有太多的代碼

Long Parameter List(過長參數(shù)列)

  1. 合理利用對象的概念榛搔,并不是函數(shù)所需要的所有東西都得通過參數(shù)傳遞诺凡,只需要傳遞它當(dāng)前所需要或者可以自己獲得的東西
  2. 學(xué)會使用對象進行參數(shù)傳遞(參數(shù)隱藏在對象中,方便后期維護升級)

注意:如果參數(shù)列太長或變化太頻繁践惑,需要重新考慮自己的依賴關(guān)系腹泌。

Divergent Change(發(fā)撒式變化)

  1. 設(shè)計的軟件要能夠容易修改且修改地方要小。
  2. 針對外界變化所有的修改都只應(yīng)該發(fā)生在某一類中尔觉,而這個新類內(nèi)的所有內(nèi)容都應(yīng)該反應(yīng)此變化凉袱。

含義:一個類受多種變化的影響

Shotgun Surgery(散彈式修改)

  1. 含義:表示某一處的修改需要修改程序中多處地方。
  2. 把需要修改的代碼和函數(shù)放到一個類中

Feature Envy(依戀情結(jié))

  1. 由于數(shù)據(jù)的緣故侦铜,一個函數(shù)可能依賴很多函數(shù)才能正常運行专甩。
  2. 將總是變化的東西放在一起。(數(shù)據(jù)和引用這些數(shù)據(jù)的行為總是一起變化的)
  3. 始終保持變化總在一個地方發(fā)生

Data Clumps(數(shù)據(jù)泥團)

  1. 注意尋找那些字段和參數(shù)特別多的類钉稍,這些就是數(shù)據(jù)泥團涤躲,需要將其進行拆分。
  2. 刪除眾多數(shù)據(jù)中的一項嫁盲,為它們產(chǎn)生一個新的對象篓叶。
  3. 減少字段和參數(shù)的個數(shù),適當(dāng)?shù)氖褂眯聦ο筮M行調(diào)用羞秤。

Primitive Obsession(基本類型偏執(zhí))

  1. 結(jié)構(gòu)類型允許你講數(shù)據(jù)組織成有意義的形式,基本類型則是構(gòu)成結(jié)構(gòu)類型的積木塊左敌。
  2. 對象的價值:模糊了橫旦于基本數(shù)據(jù)和體積較大的類之間的界限瘾蛋。

Switch Statements(switch 驚悚現(xiàn)身)

  1. 利用多態(tài)來解決面向過程中的switch語言(switch語句的問題在于重復(fù))

Parallel Inheritance Hierarchies(平行繼承體系)

  1. 使用一個繼承體系的實例引用另一個繼承體系實例

Message Chains(過渡耦合的消息鏈)

  1. 函數(shù)之間多的次嵌套調(diào)用,如果一個函數(shù)的變量發(fā)生變化則很多函數(shù)都需要進行變動矫限,牽一發(fā)而動全身哺哼。
  2. 重構(gòu)消息鏈上的任何對象:先觀察消息鏈最終得到的是什么,看能否將多個消息合并到一個獨立函數(shù)中進行處理叼风。

Middle Man(中間人)

  1. 封裝:對外部世界隱藏其內(nèi)部細(xì)節(jié)取董。

小寄語

人生短暫磨隘,我不想去追求自己看不見的淮蜈,我只想抓住我能看的見的。

我是哉說绑榴,感謝您的閱讀孽鸡,如果對你有幫助蹂午,麻煩點贊栏豺,轉(zhuǎn)發(fā) 謝謝。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末豆胸,一起剝皮案震驚了整個濱河市奥洼,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌晚胡,老刑警劉巖灵奖,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異估盘,居然都是意外死亡瓷患,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進店門忿檩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來尉尾,“玉大人,你說我怎么就攤上這事燥透∩秤剑” “怎么了?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵班套,是天一觀的道長肢藐。 經(jīng)常有香客問我,道長吱韭,這世上最難降的妖魔是什么吆豹? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮理盆,結(jié)果婚禮上痘煤,老公的妹妹穿的比我還像新娘。我一直安慰自己猿规,他們只是感情好衷快,可當(dāng)我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著姨俩,像睡著了一般蘸拔。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上环葵,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天调窍,我揣著相機與錄音,去河邊找鬼张遭。 笑死邓萨,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播先誉,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼湿刽,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了褐耳?” 一聲冷哼從身側(cè)響起诈闺,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎铃芦,沒想到半個月后雅镊,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡刃滓,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年仁烹,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片咧虎。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡卓缰,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出砰诵,到底是詐尸還是另有隱情征唬,我是刑警寧澤,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布茁彭,位于F島的核電站总寒,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏理肺。R本人自食惡果不足惜摄闸,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望妹萨。 院中可真熱鬧年枕,春花似錦、人聲如沸乎完。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽囱怕。三九已至,卻和暖如春毫别,著一層夾襖步出監(jiān)牢的瞬間娃弓,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工岛宦, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留台丛,地道東北人。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像挽霉,于是被迫代替她去往敵國和親防嗡。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,577評論 2 353

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