2.8 KiB
2.8 KiB
#рефакторинг #методы_рефакторинга
Проблема
Поле используется в другом классе больше, чем в собственном.
class Customer {
get plan() {return this._plan;}
get discountRate() {return this._discountRate;}
}
Решение
Создайте поле в новом классе и перенаправьте к нему всех пользователей старого поля.
class Customer {
get plan() {return this._plan;}
get discountRate() {return this.plan.discountRate;}
}
Причины рефакторинга
Зачастую поля переносятся как часть Извлечение класса (Extract Class). Решить, в каком из классов должно остаться поле, бывает непросто. Поле должно быть там, где находятся методы, которые его используют (либо там, где этих методов больше).
Порядок рефакторинга
- Если поле публичное, вам будет намного проще совершить рефакторинг, если вы сделаете его приватным и предоставите публичные методы доступа (для этого можно использовать рефакторинг инкапсуляция поля).
- Создайте такое же поле с методами доступа в классе-приёмнике
- Определите, как вы будете обращаться к классу-получателю. Вполне возможно, у вас уже есть поле или метод, которые возвращают подходящий объект. Если нет — нужно будет написать новый метод или поле, в котором бы хранился объект класса-получателя.
- Замените все обращения к старому полю на соответствующие вызовы методов в классе-получателе. Если поле не приватное, проделайте это и в суперклассе, и в подклассах.
- Удалите поле в исходном классе
