35 lines
2.9 KiB
Markdown
35 lines
2.9 KiB
Markdown
#рефакторинг #запахи_кода
|
||
|
||
![[Pasted image 20241112231226.png]]
|
||
|
||
> Одной из основных характеристик объектов является инкапсуляция — сокрытие внутренних деталей реализации от внешнего мира. Инкапсуляции часто сопутствует делегирование. Например, вы договариваетесь с директором о встрече. Он делегирует это сообщение своему календарю и дает вам ответ. Все хорошо и правильно. Совершенно не важно, использует ли директор ежедневник, электронное устройство или своего секретаря, чтобы вести расписание личных встреч.
|
||
> Однако такой подход может завести слишком далеко. Например, мы просматриваем интерфейс класса и обнаруживаем, что половина методов делегирует обработку другому классу.
|
||
|
||
### **Признаки**
|
||
Если класс выполняет одно действие — делегирует работу другому классу — стоит задуматься, зачем он вообще существует.
|
||
|
||
### **Причины появления**
|
||
- Данный запах может быть результатом фанатичной борьбы с **[[Цепочки сообщений]]**.
|
||
- Вся полезная нагрузка класса постепенно перемещается в другие классы, в результате кроме делегирующих методов в нем ничего не остается.
|
||
|
||
### **Рефакторинги**
|
||
- Удаление посредника
|
||
- Встраивание функции
|
||
- Замена суперкласса делегатом
|
||
- Замена подкласса делегатом
|
||
|
||
![[Pasted image 20241112231241.png]]
|
||
|
||
### **Результат**
|
||
- Уменьшение размера кода.
|
||
|
||
|
||
### **Не стоит трогать, если...**
|
||
|
||
Не удаляйте посредников, которые были созданы осознанно:
|
||
- Посредник мог быть введён для избавления от нежелательной зависимости между классами.
|
||
- Некоторые паттерны проектирования намеренно создают посредников (например, **[[Заместитель]]** или **[[Декоратор]]**)
|
||
|
||
### Ссылки
|
||
- [https://refactoring.guru/ru/smells/middle-man](https://refactoring.guru/ru/smells/middle-man)
|
||
- [[Мартин Фаулер - Рефакторинг кода на JavaScript]] |