你常常可以在很多地方看到相同的三或四筆數(shù)據(jù)項(xiàng):兩個(gè)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)將它們提煉到一個(gè)獨(dú)立對象中。然后將注意力轉(zhuǎn)移到函數(shù)簽名式(signature)上頭,運(yùn)用Introduce Parameter Object(295)或Preserve Whole Object(288)為它減肥。這么做的直接好處是可以將很多參數(shù)列縮短,簡化函數(shù)調(diào)用動(dòng)作。是的,不必因?yàn)?span style="font-weight: bold;">Data Clumps只用上新對象的一部分值或而在意,只要你以新對象取代兩個(gè)(或更多)值域,你就值回票價(jià)了。
一個(gè)好的評斷辦法是:刪掉眾多數(shù)據(jù)中的一筆。其他數(shù)據(jù)有沒有因而失去意義?如果它們不再有意義,這就是個(gè)明確信號:你應(yīng)該為它們產(chǎn)生一個(gè)新對象。
縮短值域個(gè)數(shù)和參數(shù)個(gè)數(shù),當(dāng)然可以去除一些壞味道,但更重要的是:一旦擁有新對象,你就有機(jī)會(huì)讓程序散發(fā)出一種芳香。得到新對象后,你就可以著手尋找Feature Envy,這可以幫你指出[可移到新class]中的種種程序行為。不必太久,所有classes都將在它們的小小社會(huì)中充分發(fā)揮自己的生產(chǎn)力。
一個(gè)好的評斷辦法是:刪掉眾多數(shù)據(jù)中的一筆。其他數(shù)據(jù)有沒有因而失去意義?如果它們不再有意義,這就是個(gè)明確信號:你應(yīng)該為它們產(chǎn)生一個(gè)新對象。
縮短值域個(gè)數(shù)和參數(shù)個(gè)數(shù),當(dāng)然可以去除一些壞味道,但更重要的是:一旦擁有新對象,你就有機(jī)會(huì)讓程序散發(fā)出一種芳香。得到新對象后,你就可以著手尋找Feature Envy,這可以幫你指出[可移到新class]中的種種程序行為。不必太久,所有classes都將在它們的小小社會(huì)中充分發(fā)揮自己的生產(chǎn)力。