Також відомий як Hide Delegate

Рефакторинг Приховання делегування

Проблема

Клієнт отримує об'єкт B з поля або методу об'єкту А. Потім клієнт викликає якийсь метод об'єкту B.

Рішення

Створіть новий метод в класі А, який би делегував виклик об'єкту B. Таким чином, клієнт перестане знати про клас В і залежати від нього.
До
Hide Delegate - Before
Після
Hide Delegate - After

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

Спершу слід визначитися з назвами:

  • сервер— це об'єкт, до якого клієнт має безпосередній доступ;
  • делегат— це кінцевий об'єкт, який містить функціональність, потрібну клієнтові.

Ланцюжок викликів з'являється тоді, коли клієнт запитує з одного об'єкту інший, потім вже другий об'єкт запитує ще один і так далі. Такі послідовності викликів означають, що клієнт пов'язаний з навігацією по структурі класів. Будь-які зміни проміжних зв'язків означають необхідність модифікації клієнта.

Переваги

  • Приховує делегування від клієнта. Чим менше клієнтський код знає подробиць про зв'язки між об'єктами, тим простіше згодом вноситиме зміни в програму.

Недоліки

  • Якщо потрібно створити занадто багато делегуючих методів, клас-сервер ризикує перетворитися на зайву проміжну ланку і привести до запаху посередник.

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

  1. Для кожного методу класа-делегата, що викликається клієнтом, треба створити метод в класі-сервері, який би делегував виклик класу-делегату.

  2. Змініть код клієнта так, щоб він викликав методи класу-сервера.

  3. Якщо після всіх змін клієнт більше не має потреби в класі-делегаті, можна прибрати метод доступу до класу-делегата з класу-сервера (той метод, який використовувався спочатку для отримання класу-делегата).

Замучились читати?

Збігайте за подушкою, в нас тут контенту приблизно на 7 годин читання.

Або спробуйте наш новий інтерактивний курс з рефакторингу. Він більш інформативний та набагато цікавіший за банальний тест.

Дізнатися більше...

Живий приклад

Перший раз у нас? Нічого страшного!

У нас тут все просто – цей інтерактивний приклад дуже схожий на відео (хоча й виглядає набагато крутіше).

  1. Натискаєте велику кнопку "Почати", а далі слідуєте усім підказкам.
  2. Ви можете перемотувати програвання, використовуючи стрілки зліва.
  3. Окрім того, ви можете подивитися різницю між стартовим та отриманим кодом, натиснувши кнопку ока ().
  4. Кнопка компіляції та тестування () дає змогу перевірити код на наявність помилок.