Base/Knowledges/IT/Рефакторинг/Методы рефакторинга/Свертывание иерархии (Collapse Hierarchy).md
2026-02-23 19:52:05 +03:00

39 lines
2.8 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 20250219090442.png]]
### **Проблема**
У вас есть некая иерархия классов, в которой подкласс мало чем отличается от суперкласса.
```javascript
class Employee {...}
class Salesman extends Employee {...}
```
### **Решение**
Слейте подкласс и суперкласс воедино.
```javascript
class Employee {...}
```
### **Причины рефакторинга**
Развитие программы привело к тому, что подкласс и суперкласс стали очень мало отличаться друг от друга. Какая-то фича была убрана из подкласса, какой-то метод «переехал» в суперкласс, и вот вы уже имеете два практически одинаковых класса.
### **Достоинства**
- Уменьшается сложность программы. Меньше классов, меньше вещей, которые нужно держать в голове, меньше «движущихся частей», меньше вероятность сломать что-то при последующих изменениях в коде.
- Навигация по коду становится проще, когда методы определены только в одном классе. Нужный метод не приходится искать по всей иерархии.
### **Порядок рефакторинга**
1. Выберите, какой класс убрать удобнее: суперкласс или подкласс.
2. Используйте [[Подъем поля (Pull Up Field)]] и [[Подъем метода (Pull Up Method)]], если вы решили избавиться от подкласса. Используйте [[Опускание поля (Push Down Field)]] и [[Опускание метода (Push Down Method)]], если убран будет суперкласс.
3. Замените все использования класса, который будет удалён, классом, в который переезжают поля и методы. Зачастую это будет код создания классов, указания типов параметров и переменных, а также документации в комментариях.
4. Удалите пустой класс
### **Борется с запахом**
- [[Ленивый элемент]]
- [[Теоретическая общность]]
### **Ссылки**
- https://refactoring.guru/ru/collapse-hierarchy
- [[Мартин Фаулер - Рефакторинг кода на JavaScript]]