返回總目錄 四、Long Parameter List(過長參數列) 太長的參數列難以理解,太多參數會造成前後不一致、不易使用。 1、一般情況來說,如果參數多於3個,就可以考慮使用對象了。將函數所需要的參數封裝在一個新類中,將這個類當做參數。 2、如果方法的參數數目不定,且參數類型一致,也可以使用p ...
四、Long Parameter List(過長參數列)
太長的參數列難以理解,太多參數會造成前後不一致、不易使用。
1、一般情況來說,如果參數多於3個,就可以考慮使用對象了。將函數所需要的參數封裝在一個新類中,將這個類當做參數。
2、如果方法的參數數目不定,且參數類型一致,也可以使用params關鍵字,減少重覆參數。
只需要傳給函數足夠的、讓其可以從中獲取自己需要的東西就行了
五、Divergent Change(發散式變化)
通俗地說,就是某個類經常因為不同的原因在不同的方向上發生變化(一個類受多種變化的影響)。
此時我們要做的就是找出某特定原因而造成的所有變化,然後將他們提煉到另一個類中。
針對某一外界變化的所有修改,只應發生在單一類中,而這個類中所有的內容都應反映此變化
六、Shotgun Surgery(霰彈式變化)
這種情況與Divergent Change恰恰相反。遇到某種變化,都必須在許多不同的類內做出許多小修改(一種變化引發多個類相應修改)。
把所有需要修改的代碼放進同一個類中。如果暫時沒有合適的類可以安置這些代碼,就創造一個。
Shotgun Surgery和Divergent Change你都需要適時整理重構代碼,讓“外界變化”和“需要修改的類”趨於一一對應。
七、Feature Envy(依戀情結)
這種壞味道主要在於:一個函數使用其他類屬性比使用自身類屬性還要多。換句話說,就是某個函數為了計算某個值,從另一個對象那兒調用幾乎半打的取值函數。
療法也顯而易見,就是把這部分代碼提煉到單獨的函數中,然後將函數再移到它該在的地方。
當然了,並非所有情況都這麼簡單。一個函數往往會用到幾個類的功能,那麼它究竟魂歸何處?原則就是:判斷哪個類擁有最多被此函數使用的數據,然後就把這個函數和那些數據擺在一起。
將數據和對數據的操作行為包裝在一起
八、Data Clumps(數據泥團)
兩個類中有相同的欄位、許多函數簽名中有相同的參數。
找出這些數據以欄位形式出現的地方,將它們提煉到一個獨立的對象中。要是想縮減參數可以考慮以一個對象取代這些參數。
總是綁在一起的數據應該擁有屬於它們自己的對象
To Be Continued...