Также известен как Remove Middle Man

Рефакторинг Удаление посредника

Проблема

Класс имеет слишком много методов, которые просто делегируют работу другим объектам.

Решение

Удалите эти методы и заставьте клиента вызывать конечные методы напрямую.
До
Remove Middle Man - Before
После
Remove Middle Man - After

Причины рефакторинга

В этом рефакторинге мы будем использовать названия из «сокрытия делегирования» (Hide delegate), а именно:

  • делегат — конечный объект, который содержит функциональность, нужную клиенту;
  • сервер — это объект, к которому клиент имеет непосредственный доступ.

Существует два вида проблем:

  1. Класс-сервер ничего не делает сам по себе, создавая бесполезную сложность. В этом случае стоит задуматься, нужен ли этот класс вообще.

  2. Каждый раз, когда в делегате появляется новая фича, для нее нужно создавать делегирующий метод в классе-сервере. Это бывает накладно при большом количестве изменений.

Порядок рефакторинга

  1. Создайте геттер для доступа к объекту класса-делегата из объекта класса-сервера.

  2. Замените вызовы делегирующих методов класса-сервера прямыми вызовами методов класса-делегата.

Устали читать?

Сбегайте за подушкой, у нас тут контента на 7 часов чтения.

Или попробуйте наш новый интерактивный курс по рефакторингу. Он более информативный и гораздо более интересный, чем банальный текст.

Узнать больше...

Живой пример

Первый раз здесь? Ничего страшного!

У нас здесь всё просто – интерактивный пример очень похож на видео (но выглядит гораздо круче).

  1. После начала проигрывания, вам показываются разнообразные подсказки и сообщения. Вы продвигаетесь дальше, кликая на них.
  2. Вы можете перематывать шаги, используя стрелки слева.
  3. Кроме того, вы можете посмотреть разницу между первоначальным и получившимся кодом, нажав кнопку с глазом ().
  4. Кнопка компиляции () позвоялет проверить текущий код на наличие ошибок.