РЕДАКТИРОВАТЬ : я отправил запрос на улучшение Eclipse для этого рефакторинга .
Есть ли способ переместить приватное поле из одного класса в его вспомогательный класс? Приведенный ниже шаблон UML показывает, что я сейчас делаю вручную. Класс C1
имеет приватную field
и приватную окончательную ссылку на Helper
объект перед рефакторингом.
После рефакторинга все ссылки в C1'
- field
заменяются на helper.getField()
и helper.setfield()
, в зависимости от ситуации.
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;
}
}
Я довольно часто использовал возможности рефакторинга Eclipse, но не могу придумать, как это автоматизировать.
Например, в идеале я бы перетащил приватное поле / атрибут / член из одного класса в другой и надеялся, что Eclipse спросит меня, как я хочу обрабатывать неразрешенные ссылки. Он не предлагает никаких предложений и ломает все ссылки.
Операция, которую я повторял, состоит в том, чтобы отделить знания и поведение, которые на самом деле не относятся к текущему классу. Я перемещаю атрибуты и поведение, которые ссылаются на определенные поля из исходного класса, в новый «вспомогательный» класс.
Первый шаг в моем рефакторинге - это перемещение полей. Ссылка на вспомогательный класс существует как поле в классе, из которого я выполняю рефакторинг. Чтобы не нарушать C1
во время рефакторинга, было бы неплохо, если бы Eclipse предложил генерировать геттеры и сеттеры в Helper'
и обновить ссылки в C1
, чтобы использовать геттеры / сеттеры в новом классе.