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

2.9 KiB
Raw Permalink Blame History

#рефакторинг #запахи_кода

!Pasted image 20241112231226.png

Одной из основных характеристик объектов является инкапсуляция — сокрытие внутренних деталей реализации от внешнего мира. Инкапсуляции ча­сто сопутствует делегирование. Например, вы договариваетесь с директором о встрече. Он делегирует это сообщение своему календарю и дает вам ответ. Все хорошо и правильно. Совершенно не важно, использует ли директор ежедневник, электронное устройство или своего секретаря, чтобы вести расписание личных встреч. Однако такой подход может завести слишком далеко. Например, мы просмат­риваем интерфейс класса и обнаруживаем, что половина методов делегирует обработку другому классу.

Признаки

Если класс выполняет одно действие — делегирует работу другому классу — стоит задуматься, зачем он вообще существует.

Причины появления

  • Данный запах может быть результатом фанатичной борьбы с Цепочки сообщений.
  • Вся полезная нагрузка класса постепенно перемещается в другие классы, в результате кроме делегирующих методов в нем ничего не остается.

Рефакторинги

  • Удаление посредника
  • Встраивание функции
  • Замена суперкласса делегатом
  • Замена подкласса делегатом

!Pasted image 20241112231241.png

Результат

  • Уменьшение размера кода.

Не стоит трогать, если...

Не удаляйте посредников, которые были созданы осознанно:

  • Посредник мог быть введён для избавления от нежелательной зависимости между классами.
  • Некоторые паттерны проектирования намеренно создают посредников (например, Заместитель или Декоратор)

Ссылки