#рефакторинг #методы_рефакторинга ![[Pasted image 20250219083944.png]] ### **Проблема** Поведение, реализованное в суперклассе, используется только одним или несколькими подклассами ```javascript class Employee { get quota {...} } class Engineer extends Employee {...} class Salesman extends Employee {...} ``` ### **Решение** Переместите это поведение в подклассы ```javascript class Employee {...} class Engineer extends Employee {...} class Salesman extends Employee { get quota {...} } ``` ### **Причины рефакторинга** Метод, который планировали сделать универсальным для всех классов, по факту используется только в одном подклассе. Такая ситуация может возникнуть, когда планируемые фичи так и не были реализованы. Кроме того, такая ситуация может возникнуть после извлечения (или удаления) части функциональности из иерархии классов, после которого метод остался используемым только в одном подклассе. Если вы видите, что метод необходим более чем одному подклассу (но не всем), возможно, стоит создать промежуточный подкласс и переместить метод в него. Это позволит избежать дублирования кода, которое возникло бы при спуске метода во все подклассы. ### **Достоинства** - Улучшает связность внутри классов. Метод находится там, где вы ожидаете его увидеть ### **Порядок рефакторинга** 1. Объявите метод в подклассе и скопируйте его код из суперкласса 2. Удалите метод из суперкласса 3. Найдите все места, где используется метод, и убедитесь, что он вызывается из нужного подкласса ### **Обратный рефакторинг** - [[Подъем метода (Pull Up Method)]] ### **Борется с запахом** - [[Отказ от наследственности]] ### **Ссылки** - https://refactoring.guru/ru/push-down-method - [[Мартин Фаулер - Рефакторинг кода на JavaScript]]