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

52 lines
2.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#рефакторинг #методы_рефакторинга
![[Pasted image 20250219083648.png]]
### **Проблема**
Два класса имеют одно и то же поле
```javascript
class Party {...}
class Employee extends Party {
constructor(name, id, monthlyCost) {
super();
this._id = id;
this._name = name;
this._monthlyCost = monthlyCost;
}
}
```
### **Решение**
Переместите поле в суперкласс, убрав его из подклассов.
```javascript
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. Поместите вызов конструктора суперкласса первой строкой в конструкторах подклассов
### **Борется с запахом**
- [[Дублируемый код]]
### **Ссылки**
- https://refactoring.guru/ru/pull-up-constructor-body
- [[Мартин Фаулер - Рефакторинг кода на JavaScript]]