37 lines
2.0 KiB
Markdown
37 lines
2.0 KiB
Markdown
#рефакторинг #методы_рефакторинга
|
||
|
||
![[Pasted image 20250128084347.png]]
|
||
|
||
### **Проблема**
|
||
Класс имеет слишком много методов, которые просто делегируют работу другим объектам.
|
||
```javascript
|
||
manager = aPerson.manager;
|
||
|
||
class Person {
|
||
get manager() {return this.department.manager;}
|
||
}
|
||
```
|
||
|
||
### **Решение**
|
||
Удалите эти методы и заставьте клиента вызывать конечные методы напрямую.
|
||
```javascript
|
||
manager = aPerson.department.manager;
|
||
```
|
||
|
||
### **Причины рефакторинга**
|
||
Каждый раз, когда клиент хочет использовать новую функциональную возможность делегата, нужно добавить простой метод делегирования на сервер. После ряда добавлений функциональных возможностей такая пересылка начинает раздражать. Серверный класс оказывается просто [[Посредник|посредником]], и, возможно, пришло время клиенту работать с делегатом непосредственно.
|
||
|
||
|
||
### **Порядок рефакторинга**
|
||
1. Создайте геттер для доступа к объекту класса-делегата из объекта класса-сервера.
|
||
2. Замените вызовы делегирующих методов класса-сервера прямыми вызовами методов класса-делегата.
|
||
|
||
### **Борется с запахом**
|
||
- [[Посредник]]
|
||
|
||
### **Обратный рефакторинг**
|
||
- [[Сокрытие делегата (Hide Delegate)]]
|
||
|
||
### **Ссылки**
|
||
- https://refactoring.guru/ru/remove-middle-man
|
||
- [[Мартин Фаулер - Рефакторинг кода на JavaScript]] |