EDIT: Envié un Eclipse enhancement request for this refactoring.Refactorización para mover un campo privado de una clase a su clase auxiliar?
¿Hay alguna forma de mover un campo privado de una clase a su clase auxiliar? El siguiente UML de rayas de pollo muestra lo que estoy haciendo manualmente ahora. La clase C1
tiene field
privado y una referencia final privada a un objeto Helper
antes de la refactorización.
Después de la refactorización, todas las referencias en C1'
a field
se cambian a helper.getField()
y helper.setfield()
según corresponda.
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;
}
}
He utilizado las capacidades de refactorización de Eclipse un poco, pero no puedo encontrar una manera de automatizar este.
Por ejemplo, idealmente arrastraría el campo/atributo/miembro privado de una clase a otra y espero que Eclipse me pregunte cómo quiero manejar las referencias no resueltas. No ofrece sugerencias y rompe todas las referencias.
La operación que he estado repitiendo es separar el conocimiento y el comportamiento que realmente no pertenecen a la clase actual. Estoy moviendo atributos y comportamiento que hace referencia a ciertos campos fuera de la clase original en una nueva clase de "ayuda".
El primer paso en mi refactorización es mover los campos. Una referencia a la clase auxiliar existe como un campo en la clase de la que estoy refactorizando. Para no romper C1
durante la refactorización, creo que sería bueno si Eclipse ofreciera generar getters y setters en Helper'
y actualizar las referencias en C1
para usar los getters/setters en la nueva clase.
Para información, ¿qué versión de Eclipse estás usando? – romaintaz
3.5, pero trataría de actualizar a 3.6 si esta característica se ha mejorado. Sin embargo, leí las notas de la versión y parece haber poco cambio en 3.6 con respecto a la refactorización. –