Вбудовування методу
Також відомий як: Inline Method
Проблема
Варто використовувати у випадках, коли тіло методу очевидніше за сам метод.
Рішення
Замініть виклики методу його вмістом і видаліть сам метод.
До
class PizzaDelivery {
// ...
int getRating() {
return moreThanFiveLateDeliveries() ? 2 : 1;
}
boolean moreThanFiveLateDeliveries() {
return numberOfLateDeliveries > 5;
}
}
Після
class PizzaDelivery {
// ...
int getRating() {
return numberOfLateDeliveries > 5 ? 2 : 1;
}
}
До
class PizzaDelivery
{
// ...
int GetRating()
{
return MoreThanFiveLateDeliveries() ? 2 : 1;
}
bool MoreThanFiveLateDeliveries()
{
return numberOfLateDeliveries > 5;
}
}
Після
class PizzaDelivery
{
// ...
int GetRating()
{
return numberOfLateDeliveries > 5 ? 2 : 1;
}
}
До
function getRating() {
return ($this->moreThanFiveLateDeliveries()) ? 2 : 1;
}
function moreThanFiveLateDeliveries() {
return $this->numberOfLateDeliveries > 5;
}
Після
function getRating() {
return ($this->numberOfLateDeliveries > 5) ? 2 : 1;
}
До
class PizzaDelivery:
# ...
def getRating(self):
return 2 if self.moreThanFiveLateDeliveries() else 1
def moreThanFiveLateDeliveries(self):
return self.numberOfLateDeliveries > 5
Після
class PizzaDelivery:
# ...
def getRating(self):
return 2 if self.numberOfLateDeliveries > 5 else 1
До
class PizzaDelivery {
// ...
getRating(): number {
return moreThanFiveLateDeliveries() ? 2 : 1;
}
moreThanFiveLateDeliveries(): boolean {
return numberOfLateDeliveries > 5;
}
}
Після
class PizzaDelivery {
// ...
getRating(): number {
return numberOfLateDeliveries > 5 ? 2 : 1;
}
}
Причини рефакторингу
Основна причина — тіло методу складається з простого делегування до іншого методу. Саме по собі таке делегування — не проблема. Але якщо таких методів досить багато, стає дуже легко в них заплутатися.
Зазвичай методи не бувають занадто короткими з самого початку, вони стають такими в результаті змін в програмі. Тому не бійтеся позбавлятись від методів, що стали непотрібними.
Переваги
- Мінімізуючи кількість таких «лінивих» методів, ми зменшуємо загальну складність коду.
Порядок рефакторингу
-
Переконайтесь, що метод не перевизначається в підкласах. Якщо він перевизначається, утримайтесь від рефакторингу.
-
Знайдіть всі виклики методу. Замініть ці виклики вмістом методу.
-
Видаліть метод.