Глянь мій новий курс по Git! Привіт! Глянь мій новий курс по Git! Привіт! Глянь мій новий курс по Git на GitByBit.com! Привіт! Хочеш класно освіжити Git? Глянь мій новий курс на GitByBit.com!

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

Також відомий як: 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. Видаліть код отримання значень з об’єкта-параметра, який стояв перед викликом методу.