Base/Knowledges/IT/Рефакторинг/Методы рефакторинга/Подъем тела конструктора (Pull Up Constructor Body).md
2026-02-23 19:52:05 +03:00

2.1 KiB
Raw Blame History

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

!Pasted image 20250219083648.png

Проблема

Два класса имеют одно и то же поле

class Party {...}

class Employee extends Party {
  constructor(name, id, monthlyCost) {
    super();
    this._id = id;
    this._name = name;
    this._monthlyCost = monthlyCost;
  }
}

Решение

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

class Party {
  constructor(name){
    this._name = name;
  }
}

class Employee extends Party {
  constructor(name, id, monthlyCost) {
    super(name);
    this._id = id;
    this._monthlyCost = monthlyCost;
  }
}

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

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

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

  1. Создайте конструктор в суперклассе
  2. Извлеките общий код из начала конструктора каждого из подклассов в конструктор суперкласса. Перед этим действием стоит попробовать поместить как можно больше общего кода в начало конструктора
  3. Поместите вызов конструктора суперкласса первой строкой в конструкторах подклассов

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

Ссылки