2026-02-23 19:52:05 +03:00

2.8 KiB
Raw Permalink Blame History

#рефакторинг #методы_рефакторинга

!Pasted image 20250131084410.png

Проблема

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

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). Решить, в каком из классов должно остаться поле, бывает непросто. Поле должно быть там, где находятся методы, которые его используют (либо там, где этих методов больше).

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

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

Борется с запахом

Ссылки