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