2.7 KiB
#рефакторинг #методы_рефакторинга
Проблема
Поведение, реализованное в суперклассе, используется только одним или несколькими подклассами
class Employee {
get quota {...}
}
class Engineer extends Employee {...}
class Salesman extends Employee {...}
Решение
Переместите это поведение в подклассы
class Employee {...}
class Engineer extends Employee {...}
class Salesman extends Employee {
get quota {...}
}
Причины рефакторинга
Метод, который планировали сделать универсальным для всех классов, по факту используется только в одном подклассе. Такая ситуация может возникнуть, когда планируемые фичи так и не были реализованы.
Кроме того, такая ситуация может возникнуть после извлечения (или удаления) части функциональности из иерархии классов, после которого метод остался используемым только в одном подклассе.
Если вы видите, что метод необходим более чем одному подклассу (но не всем), возможно, стоит создать промежуточный подкласс и переместить метод в него. Это позволит избежать дублирования кода, которое возникло бы при спуске метода во все подклассы.
Достоинства
- Улучшает связность внутри классов. Метод находится там, где вы ожидаете его увидеть
Порядок рефакторинга
- Объявите метод в подклассе и скопируйте его код из суперкласса
- Удалите метод из суперкласса
- Найдите все места, где используется метод, и убедитесь, что он вызывается из нужного подкласса
