Передача усього об'єкта
Проблема
Ви отримуєте декілька значень від об’єкта, а потім передаєте їх в метод як параметри.
Рішення
Замість цього передавайте весь об’єкт.
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)
let low = daysTempRange.getLow();
let high = daysTempRange.getHigh();
let withinPlan = plan.withinRange(low, high);
let withinPlan = plan.withinRange(daysTempRange);
Причини рефакторингу
Проблема полягає в тому, що перед викликом вашого методу треба кожного разу викликати методи майбутнього об’єкта-параметра. Якщо метод виклику цих методів або кількість даних, що отримуються для методу, зміниться, то зміни доведеться шукати і вносити в безлічі місць програми.
Замість цього код отримання усіх потрібних даних може зберігатися одному місці — в самому методі.
Переваги
-
Замість пачки різноманітних параметрів ви бачите один об’єкт із зрозумілою назвою.
-
Якщо методу знадобляться ще якісь дані з об’єкта, не треба буде переписувати усі місця, де викликається цей метод, а тільки нутрощі самого методу.
Недоліки
- В деяких випадках після такого перетворення метод втрачає в універсальності, оскільки він міг отримувати дані з безлічі різних джерел, а в результаті рефакторингу ми обмежуємо круг його застосування тільки для об’єктів з певним інтерфейсом.
Порядок рефакторингу
-
Створіть параметр в методі для об’єкта, з якого можна отримати потрібні значення.
-
Тепер починайте по одному видаляти старі параметри з методу, замінюючи їх в коді викликами відповідних методів об’єкта-параметра. Тестуйте програму після кожної заміни параметра.
-
Видаліть код отримання значень з об’єкта-параметра, який стояв перед викликом методу.