Перемещение поля
Проблема
Поле используется в другом классе больше, чем в собственном.
Решение
Создайте поле в новом классе и перенаправьте к нему всех пользователей старого поля.
Причины рефакторинга
Зачастую поля переносятся как часть извлечение одного класса из другого. Решить, в каком из классов должно остаться поле, бывает непросто. Тем не менее, у нас есть неплохой рецепт — поле должно быть там, где находятся методы, которые его используют (либо там, где этих методов больше).
Это правило поможет вам и в других случаях, когда поле попросту находится не там, где нужно.
Порядок рефакторинга
-
Если поле публичное, вам будет намного проще совершить рефакторинг, если вы сделаете его приватным и предоставите публичные методы доступа (для этого можно использовать рефакторинг инкапсуляция поля).
-
Создайте такое же поле с методами доступа в классе-приёмнике.
-
Определите, как вы будете обращаться к классу-получателю. Вполне возможно, у вас уже есть поле или метод, которые возвращают подходящий объект. Если нет — нужно будет написать новый метод или поле, в котором бы хранился объект класса-получателя.
-
Замените все обращения к старому полю на соответствующие вызовы методов в классе-получателе. Если поле не приватное, проделайте это и в суперклассе, и в подклассах.
-
Удалите поле в исходном классе.