Також відомий як Preserve Whole Object

Рефакторинг Передача усього об'єкту

Проблема

Ви отримуєте декілька значень від об'єкта, а потім передаєте їх в метод як параметри.

Рішення

Замість цього передавайте весь об'єкт.
До
int low = daysTempRange.getLow();
int high = daysTempRange.getHigh();
boolean withinPlan = plan.withinRange(low, high);
Після
boolean withinPlan = plan.withinRange(daysTempRange);
До
int low = daysTempRange.GetLow();
int high = daysTempRange.GetHigh();
bool withinPlan = plan.WithinRange(low, high);
Після
bool withinPlan = plan.WithinRange(daysTempRange);
До
$low = $daysTempRange->getLow();
$high = $daysTempRange->getHigh();
$withinPlan = $plan->withinRange($low, $high);
Після
$withinPlan = $plan->withinRange($daysTempRange);
До
low = daysTempRange.getLow()
high = daysTempRange.getHigh()
withinPlan = plan.withinRange(low, high)
Після
withinPlan = plan.withinRange(daysTempRange)

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

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

Замість цього код отримання усіх потрібних даних може зберігатися одному місці - в самому методі.

Переваги

  • Замість пачки різноманітних параметрів ви бачите один об'єкт із зрозумілою назвою.

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

Недоліки

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

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

  1. Створіть параметр в методі для об'єкту, з якого можна отримати потрібні значення.

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

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

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

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

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

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

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

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

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

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