Также известен как 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

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

Основаная причина – тело метода состоит из простого делегирования к другому методу. Само по себе такое делегирование — не проблема. Но если таких методов довольно много, становится очень легко в них запутаться.

Зачастую методы не бывают слишком короткими изначально, а становятся такими в результате изменений в программе. Поэтому не стоит бояться избавляться от ставших ненужными методов.

Достоинства

  • Минимизируя количество бесполезных методов, мы уменьшаем общую сложность кода.

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

  1. Убедитесь, что метод не переопределяется в подклассах. Если он переопределяется, воздержитесь от рефакторинга.

  2. Найдите все вызовы метода. Замените эти вызовы содержимым метода.

  3. Удалите метод.

Устали читать?

Сбегайте за подушкой, у нас тут контента на 7 часов чтения.

Или попробуйте наш новый интерактивный курс по рефакторингу. Он более информативный и гораздо более интересный, чем банальный текст.

Узнать больше...