Base/Knowledges/IT/Рефакторинг/Методы рефакторинга/Опускание поля (Push Down Field).md
2026-02-23 19:52:05 +03:00

2.4 KiB
Raw Blame History

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

!Pasted image 20250219084214.png

Проблема

Поле используется только в некоторых подклассах

class Employee {        // Java
  private String quota;
}

class Engineer extends Employee {...}
class Salesman extends Employee {...}

Решение

Переместите поле в эти подклассы

class Employee {...}
class Engineer extends Employee {...}

class Salesman extends Employee {
  protected String quota;
}

Причины рефакторинга

Поле, которое планировали сделать универсальным для всех классов, по факту используется только в некоторых подклассах. Такая ситуация может возникнуть, когда планируемые фичи так и не были реализованы.

Кроме того, такая ситуация может возникнуть после извлечения (или удаления) части функциональности из иерархии классов.

Достоинства

  • Улучшает связность внутри классов. Поле находится там, где оно реально используется
  • При перемещении в несколько подклассов одновременно, появляется возможность развивать поля независимо друг от друга. Правда, такое действие создаёт дублирование кода, поэтому стоит спускать поля, только если вы действительно намерены использовать их по-разному

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

  1. Объявите поле во всех необходимых подклассах
  2. Удалите поле из суперкласса

Обратный рефакторинг

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

Ссылки