2.1 KiB
2.1 KiB
#рефакторинг #методы_рефакторинга
Проблема
Два класса имеют одно и то же поле
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;
}
}
Причины рефакторинга
В большинстве языков программирования конструктор подкласса может иметь свой собственный список параметров, отличный от параметров суперкласса, поэтому вы должны создать конструктор суперкласса только с теми параметрами, которые ему действительно нужны.
Порядок рефакторинга
- Создайте конструктор в суперклассе
- Извлеките общий код из начала конструктора каждого из подклассов в конструктор суперкласса. Перед этим действием стоит попробовать поместить как можно больше общего кода в начало конструктора
- Поместите вызов конструктора суперкласса первой строкой в конструкторах подклассов
