EDIT: Ho inviato un Eclipse enhancement request for this refactoring.Rifattorizzazione per spostare un campo privato da una classe alla sua classe helper?
C'è un modo per spostare un campo privato da una classe alla sua classe helper? L'UML sotto zero di pollo mostra cosa sto facendo manualmente in questo momento. La classe C1
ha privato field
e un riferimento finale privato a un oggetto Helper
prima del refactoring.
Dopo il refactoring, tutti i riferimenti in C1'
a field
vengono modificati in helper.getField()
e helper.setfield()
in base alle esigenze.
class Field {}
class C1 {
final private Field field;
final private Helper helper;
public Field getField() {
return field;
}
public C1() {
helper = new Helper();
field = new Field();
}
}
class Helper {}
class C1Prime {
final private HelperPrime helper;
public Field getField() {
return helper.getField();
}
public C1Prime() {
helper = new HelperPrime();
}
}
class HelperPrime {
final private Field field;
public HelperPrime() {
field = new Field();
}
public Field getField() {
return field;
}
}
ho usato le funzionalità di refactoring di Eclipse un bel po ', ma non riesco a trovare un modo per automatizzare questo.
Ad esempio, preferirei trascinare il campo/attributo/membro privato da una classe all'altra e spero che Eclipse mi chieda come voglio gestire i riferimenti non risolti. Non offre suggerimenti e interrompe tutti i riferimenti.
L'operazione che ho ripetuto è separare conoscenze e comportamenti che non appartengono realmente alla classe corrente. Sto spostando attributi e comportamenti che fanno riferimento a determinati campi della classe originale in una nuova classe "helper".
Il primo passo nel mio refactoring è spostare i campi. Un riferimento alla classe helper esiste come un campo nella classe da cui mi sto rifacendo. Per non rompere C1
durante il refactoring, penso che sarebbe bello se Eclipse offrisse di generare getter e setter in Helper'
e aggiornare i riferimenti in C1
per utilizzare i getter/setter nella nuova classe.
Per informazioni, quale versione di Eclipse stai usando? – romaintaz
3.5, ma proverei l'aggiornamento a 3.6 se questa funzione fosse migliorata. Tuttavia, ho letto le note di rilascio e sembra poco cambiato in 3.6 rispetto al refactoring. –