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