Переміщення функцій між об'єктами

Якщо ви розмістили функціональність по класах не найвдалішим чином - це ще не привід впадати у відчай.

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

Переміщення методу

Проблема: Метод використовується в іншому класі більше, ніж у власному.

Рішення: Створіть новий метод в класі, який використовує його більше інших, і перенесіть туди код із старого методу. Код оригінального методу перетворіть на звернення до нового методу в іншому класі або приберіть його взагалі.

Переміщення поля

Проблема: Поле використовується в іншому класі більше, ніж у власному.

Рішення: Створіть поле в новому класі і перенаправляйте до нього всіх користувачів старого поля.

Відокремлення класу

Проблема: Один клас працює за двох.

Рішення: Створіть новий клас, перемістіть в нього поля і методи, що відповідають за певну функціональність.

Вбудовування класу

Проблема: Клас майже нічого не робить, ні за що не відповідає, і ніякої відповідальності для цього класу не планується.

Рішення: Перемістіть усі фічі з цього класу в інший.

Приховання делегування

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

Рішення: Створіть новий метод в класі А, який би делегував виклик об'єкту B. Таким чином, клієнт перестане знати про клас В і залежати від нього.

Видалення посередника

Проблема: Клас має занадто багато методів, які просто делегують роботу іншим об'єктам.

Рішення: Видаліть ці методи і змусьте клієнта викликати кінцеві методи безпосередньо.

Введення зовнішнього методу

Проблема: Службовий клас не містить методу, який вам потрібен, при цьому у вас немає можливості додати метод в цей клас.

Рішення: Додайте метод в клієнтський клас і передавайте в нього об'єкт службового класу в якості аргументу.

Введення локального розширення

Проблема: В службовому класі відсутні деякі методи, які вам потрібні. При цьому додати їх в цей клас ви не можете.

Рішення: Створіть новий клас, який би містив ці методи, і зробіть його спадкоємцем службового класу, або його обгорткою.

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

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

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

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