你常??梢栽诤芏嗟胤娇吹较嗤娜蛩墓P數據項:兩個classes內的相同值域(field)、許多函數簽名式(signature)中的相同參數。這
些[總是綁在一起出現的數據]真應該放進屬于它們自己的對象中。首先請找出這些數據的值域形式(field)出現點,運用Extract
Class(149)將它們提煉到一個獨立對象中。然后將注意力轉移到函數簽名式(signature)上頭,運用Introduce Parameter Object(295)或Preserve Whole Object(288)為它減肥。這么做的直接好處是可以將很多參數列縮短,簡化函數調用動作。是的,不必因為Data Clumps只用上新對象的一部分值或而在意,只要你以新對象取代兩個(或更多)值域,你就值回票價了。
一個好的評斷辦法是:刪掉眾多數據中的一筆。其他數據有沒有因而失去意義?如果它們不再有意義,這就是個明確信號:你應該為它們產生一個新對象。
縮短值域個數和參數個數,當然可以去除一些壞味道,但更重要的是:一旦擁有新對象,你就有機會讓程序散發出一種芳香。得到新對象后,你就可以著手尋找Feature Envy,這可以幫你指出[可移到新class]中的種種程序行為。不必太久,所有classes都將在它們的小小社會中充分發揮自己的生產力。