Весняний РОЗПРОДАЖ

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

Також відомий як: 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)
До
let low = daysTempRange.getLow();
let high = daysTempRange.getHigh();
let withinPlan = plan.withinRange(low, high);
Після
let withinPlan = plan.withinRange(daysTempRange);

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

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

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

Переваги

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

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

Недоліки

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

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

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

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

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