EDIT. Я отправил запрос расширения 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 совсем немного, но я не могу найти способ автоматизировать это.
Например, в идеале я бы перетащил private field/attribute/member из одного класса в другой и надеюсь, что Eclipse спросит меня, как я хочу обрабатывать неразрешенные ссылки. Он не предлагает предложений и не разбивает все ссылки.
Операция, которую я повторяю, заключается в разделении знаний и поведения, которые на самом деле не относятся к текущему классу. Я перемещаю атрибуты и поведение, которые ссылаются на определенные поля из исходного класса в новый класс "помощник".
Первым шагом в моем рефакторинге является перемещение полей. Ссылка на класс-помощник существует как поле в классе, с которого я рефакторинг. Чтобы не разорвать C1
во время рефакторинга, я думаю, было бы неплохо, если бы Eclipse предложила генерировать геттеры и сеттеры в Helper'
и обновить ссылки в C1
, чтобы использовать геттеры/сеттеры в новом классе.