重構,改善既有代碼的設計 第二章(1)
@關于間接層的概念。
間接層就是我們所提煉出來的小函數。本來事情是可以交給一個大函數一次性去執行完的,可是我們為什么還要把他分割成小函數,再委托小函數這個間接層去完成事情呢。以下是作者總結出來的三點間接層的好處。
1、 允許邏輯共享。也就是說小函數做的這些小事情,子類也同樣可以做,而且跟其他事情互不干擾。
2、間接層給了我們一個解釋自己意圖的機會。間接層允許我們選擇最適合表達我們意圖的名字來命名,那在調用這些函數的時候,我一看他們的名字就知道他們可能會做些什么事情。就像Justin昨天寫的那個 A()
{
…
….
…. 200 行
}
改成
A()
{
A1();
A2();
A3();
}
A1()
{
…….
}
A2(){….}
A3(){….}
這樣你在整理邏輯的時候,頭腦會很清醒。(因為名字是我們賦予他們的意義)
3、將變化加以隔離,當我需要修改一些邏輯的時候,我可以把我在整個項目中掀起的波瀾降低很多。
@在有些開源的框架內,我的接口名字已經公布了,可是現在我在重構的時候需要改變這些接口名字,改怎么辦呢?
這時候可以保留舊的接口,然后在舊的接口中用新接口來實現邏輯。一直持續到所有用戶都開始使用新接口的時候,再把這個舊接口去掉。
@這個世界不存在一條萬能的定律能解決一切問題(我曾經想象要是有這么一條定律就好了,這也是很多哲學家,科學家所追求過的),所以不要試圖用重構來拯救整個世界。有以下幾種情況重構不適用。
當代碼已經腐朽到連正常功能都不能運行的時候,也許重寫(從頭再來一遍)比重構要來的簡單。
有的時候臨近發布,我們要趕眼前的時間,就不應重構了。重構其實是一劑中藥,雖然藥效很好,但是效果卻也來的慢一些。如果是趕時間發布,那就不要寄希望于重構了。重構是我們欠的債,很多時候我們都是舉債來發布的,但是債都是有利息的,“過于復雜的代碼所造成的【維護和擴展的額外開銷】就是利息。一定的利息我們可以承受,但是利息過高就會被拖垮。“出來混總是要還的”。最近幾次發布都通宵,這也許就是我們的重構債欠的有點過多的信號。是時候來償還一些債了。