Також відомий як Move Method

Рефакторинг Переміщення методу

Проблема

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

Рішення

Створіть новий метод в класі, який використовує його більше інших, і перенесіть туди код із старого методу. Код оригінального методу перетворіть на звернення до нового методу в іншому класі або приберіть його взагалі.
До
Move Method - Before
Після
Move Method - After

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

  1. Ви вирішили перемістити метод в клас, де знаходяться дані, з якими, в основному, і працює цей метод. Цим ви збільшуєте зв'язність усередині класів.

  2. Ви хочете перемістити метод, щоб прибрати або зменшити залежність класу, що викликає цей метод, від класу, в якому він знаходився. Це може бути корисно у випадку, коли клас, що викликає, вже має залежність від того класу, куди ви плануєте перенести метод. Таким чином, ви зменшуєте зв'язаність між класами.

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

  1. Перевірте всі фічі, які були використані старим методом в його ж класі. Можливо, їх теж слід перемістити. Керуйтеся таким правилом — якщо фіча використовується методом, що вас зараз цікавить, її точно слід переносити. Якщо фіча використовується також іншими методами, можливо, слід перенести і ці методи. Іноді набагато простіше перенести пачку методів, ніж налаштовувати взаємодію між ними в різних класах.

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

  1. Оголосіть новий метод в класі-одержувачі. Можливо, слід придумати для методу нове ім'я, яке в новому класі підходитиме йому більше.

  2. Визначте, яким чином ви звертатиметеся до класу-одержувачу. Цілком можливо, у вас вже є поле або метод, які повертають відповідний об'єкт, але якщо ні, треба буде написати новий метод або поле, в якому б зберігався об'єкт класу-одержувача.

Тепер у вас є спосіб звертатися до об'єкту-одержувача і новий метод в його класі. А тому ви вже можете перетворити старий метод на звернення до нового методу.

  1. Оцініть, чи є можливість видалити старий метод взагалі? При цьому потрібно буде у всіх місцях, де використовується цей метод, поставити звернення до нового.

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

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

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

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

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

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

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

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