重構(gòu)改善既有代碼的設(shè)計
在日常的編碼過程中沐绒,這些知識點可能是非常容易忽視或者由于編碼習(xí)慣而出差錯的地方
軟件工程的意義:希望建立完美的需求與設(shè)計俩莽,按照既有的規(guī)編寫標(biāo)準(zhǔn)劃一的代碼,這是結(jié)構(gòu)的美乔遮;快速迭代和RAD顛覆“全知全能”神話扮超,用近乎刀劈斧砍的方式解決問題,在混沌的循環(huán)往復(fù)中實現(xiàn)需求蹋肮,這是解構(gòu)的美出刷。
Duplicated Code(重復(fù)代碼)
- 程序中兩段代碼極度類似
- 判斷是否表達的含義是否一致。
- 是否在別的地方進行引用
- 將其合并為一個類中的一個函數(shù)坯辩,通過調(diào)用來實現(xiàn)功能簡化代碼復(fù)用馁龟。
- 對于重復(fù)代碼,需要提煉者認(rèn)真思考漆魔,提煉后的函數(shù)放在那個位置更合適坷檩,保證函數(shù)的唯一性。
Long Method(過長函數(shù))
- 避免程序中的函數(shù)(方法)過長
- 短函數(shù)對象好理解有送,容易閱讀淌喻,美觀帶來的全部利益:
- 解釋能力,共享能力雀摘,選擇能力
- 設(shè)計短函數(shù)的原則
- 每當(dāng)感覺需要以注釋來解釋來說明點什么的時候裸删,就把需要說明的東西寫道一個獨立的函數(shù)中,并以其用途命名阵赠。
- 關(guān)鍵不在于函數(shù)的長度涯塔,而在于函數(shù)“做什么”肌稻、“如何做”之間的語義距離
- 如何設(shè)計短函數(shù)
- 尋找注釋
注釋能表達出此函數(shù)的具體含義,體現(xiàn)代碼用途和實現(xiàn)手法之間的語義距離;
哪怕是在函數(shù)中的一句注釋匕荸,如果此注釋只是用來說明的爹谭,也有必要將其設(shè)計提煉成一個單獨的函數(shù)
- 注意條件表達式和循環(huán)程序
Large Class(過大的類)
- 注意那些做太多事情的單個類,他們很可能就是過大的類
- 有太多的代碼
Long Parameter List(過長參數(shù)列)
- 合理利用對象的概念榛搔,并不是函數(shù)所需要的所有東西都得通過參數(shù)傳遞诺凡,只需要傳遞它當(dāng)前所需要或者可以自己獲得的東西
- 學(xué)會使用對象進行參數(shù)傳遞(參數(shù)隱藏在對象中,方便后期維護升級)
注意:如果參數(shù)列太長或變化太頻繁践惑,需要重新考慮自己的依賴關(guān)系腹泌。
Divergent Change(發(fā)撒式變化)
- 設(shè)計的軟件要能夠容易修改且修改地方要小。
- 針對外界變化所有的修改都只應(yīng)該發(fā)生在某一類中尔觉,而這個新類內(nèi)的所有內(nèi)容都應(yīng)該反應(yīng)此變化凉袱。
含義:一個類受多種變化的影響
Shotgun Surgery(散彈式修改)
- 含義:表示某一處的修改需要修改程序中多處地方。
- 把需要修改的代碼和函數(shù)放到一個類中
Feature Envy(依戀情結(jié))
- 由于數(shù)據(jù)的緣故侦铜,一個函數(shù)可能依賴很多函數(shù)才能正常運行专甩。
- 將總是變化的東西放在一起。(數(shù)據(jù)和引用這些數(shù)據(jù)的行為總是一起變化的)
- 始終保持變化總在一個地方發(fā)生
Data Clumps(數(shù)據(jù)泥團)
- 注意尋找那些字段和參數(shù)特別多的類钉稍,這些就是數(shù)據(jù)泥團涤躲,需要將其進行拆分。
- 刪除眾多數(shù)據(jù)中的一項嫁盲,為它們產(chǎn)生一個新的對象篓叶。
- 減少字段和參數(shù)的個數(shù),適當(dāng)?shù)氖褂眯聦ο筮M行調(diào)用羞秤。
Primitive Obsession(基本類型偏執(zhí))
- 結(jié)構(gòu)類型允許你講數(shù)據(jù)組織成有意義的形式,基本類型則是構(gòu)成結(jié)構(gòu)類型的積木塊左敌。
- 對象的價值:模糊了橫旦于基本數(shù)據(jù)和體積較大的類之間的界限瘾蛋。
Switch Statements(switch 驚悚現(xiàn)身)
- 利用多態(tài)來解決面向過程中的switch語言(switch語句的問題在于重復(fù))
Parallel Inheritance Hierarchies(平行繼承體系)
- 使用一個繼承體系的實例引用另一個繼承體系實例
Message Chains(過渡耦合的消息鏈)
- 函數(shù)之間多的次嵌套調(diào)用,如果一個函數(shù)的變量發(fā)生變化則很多函數(shù)都需要進行變動矫限,牽一發(fā)而動全身哺哼。
- 重構(gòu)消息鏈上的任何對象:先觀察消息鏈最終得到的是什么,看能否將多個消息合并到一個獨立函數(shù)中進行處理叼风。
Middle Man(中間人)
- 封裝:對外部世界隱藏其內(nèi)部細(xì)節(jié)取董。
小寄語
人生短暫磨隘,我不想去追求自己看不見的淮蜈,我只想抓住我能看的見的。
我是哉說绑榴,感謝您的閱讀孽鸡,如果對你有幫助蹂午,麻煩點贊栏豺,轉(zhuǎn)發(fā) 謝謝。