Autumn SALE

Перемещение поля

Также известен как: Move Field

Проблема

Поле используется в другом классе больше, чем в собственном.

Решение

Создайте поле в новом классе и перенаправьте к нему всех пользователей старого поля.

До
Move Field - Before
После
Move Field - After

Причины рефакторинга

Зачастую поля переносятся как часть извлечение одного класса из другого. Решить, в каком из классов должно остаться поле, бывает непросто. Тем не менее, у нас есть неплохой рецепт — поле должно быть там, где находятся методы, которые его используют (либо там, где этих методов больше).

Это правило поможет вам и в других случаях, когда поле попросту находится не там, где нужно.

Порядок рефакторинга

  1. Если поле публичное, вам будет намного проще совершить рефакторинг, если вы сделаете его приватным и предоставите публичные методы доступа (для этого можно использовать рефакторинг инкапсуляция поля).

  2. Создайте такое же поле с методами доступа в классе-приёмнике.

  3. Определите, как вы будете обращаться к классу-получателю. Вполне возможно, у вас уже есть поле или метод, которые возвращают подходящий объект. Если нет — нужно будет написать новый метод или поле, в котором бы хранился объект класса-получателя.

  4. Замените все обращения к старому полю на соответствующие вызовы методов в классе-получателе. Если поле не приватное, проделайте это и в суперклассе, и в подклассах.

  5. Удалите поле в исходном классе.