2026-02-23 19:52:05 +03:00

35 lines
2.9 KiB
Markdown
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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