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