32 lines
1.9 KiB
Markdown
32 lines
1.9 KiB
Markdown
#рефакторинг #методы_рефакторинга
|
||
|
||
![[Pasted image 20250220083403.png]]
|
||
|
||
### **Проблема**
|
||
В интерфейсе стека присутствовали все операции списка, хотя большинство из них к стеку были не применимы.
|
||
```javascript
|
||
class List {...}
|
||
class Stack extends List {...}
|
||
```
|
||
|
||
### **Решение**
|
||
Превратить список в поле стека и делегировать ему необходимые операции.
|
||
```javascript
|
||
class Stack {
|
||
constructor() {
|
||
this._storage = new List();
|
||
}
|
||
}
|
||
class List {...}
|
||
```
|
||
|
||
### **Причины рефакторинга**
|
||
Если функции суперкласса не имеют смысла для подкласса, это признак того, что я не должен применять наследование для использования функциональности суперкласса.
|
||
|
||
### **Порядок рефакторинга**
|
||
1. Создайте в подклассе поле, которое ссылается на объект суперкласса. Инициализируйте эту ссылку делегата новым экземпляром
|
||
2. Для каждого элемента суперкласса создайте в подклассе функцию передачи, которая выполняет передачу созданной ссылке на делегата. Выполните тестирование после реализации передачи для каждой согласованной группы.
|
||
3. Когда все элементы суперкласса окажутся перекрыты передающими функциями, удалите наследование.
|
||
|
||
### **Ссылки**
|
||
- [[Мартин Фаулер - Рефакторинг кода на JavaScript]] |