2.9 KiB
#рефакторинг #запахи_кода
Одной из основных характеристик объектов является инкапсуляция — сокрытие внутренних деталей реализации от внешнего мира. Инкапсуляции часто сопутствует делегирование. Например, вы договариваетесь с директором о встрече. Он делегирует это сообщение своему календарю и дает вам ответ. Все хорошо и правильно. Совершенно не важно, использует ли директор ежедневник, электронное устройство или своего секретаря, чтобы вести расписание личных встреч. Однако такой подход может завести слишком далеко. Например, мы просматриваем интерфейс класса и обнаруживаем, что половина методов делегирует обработку другому классу.
Признаки
Если класс выполняет одно действие — делегирует работу другому классу — стоит задуматься, зачем он вообще существует.
Причины появления
- Данный запах может быть результатом фанатичной борьбы с Цепочки сообщений.
- Вся полезная нагрузка класса постепенно перемещается в другие классы, в результате кроме делегирующих методов в нем ничего не остается.
Рефакторинги
- Удаление посредника
- Встраивание функции
- Замена суперкласса делегатом
- Замена подкласса делегатом
Результат
- Уменьшение размера кода.
Не стоит трогать, если...
Не удаляйте посредников, которые были созданы осознанно:
- Посредник мог быть введён для избавления от нежелательной зависимости между классами.
- Некоторые паттерны проектирования намеренно создают посредников (например, Заместитель или Декоратор)

