Замена параметра вызовом метода
Проблема
Вызываем метод и передаем его результаты как параметры другого метода. При этом значение параметров могли бы быть получены и внутри вызываемого метода.
Решение
Вместо передачи значения через параметры метода, попробуйте переместить код получения значения внутрь самого метода.
int basePrice = quantity * itemPrice;
double seasonDiscount = this.getSeasonalDiscount();
double fees = this.getFees();
double finalPrice = discountedPrice(basePrice, seasonDiscount, fees);
int basePrice = quantity * itemPrice;
double finalPrice = discountedPrice(basePrice);
int basePrice = quantity * itemPrice;
double seasonDiscount = this.GetSeasonalDiscount();
double fees = this.GetFees();
double finalPrice = DiscountedPrice(basePrice, seasonDiscount, fees);
int basePrice = quantity * itemPrice;
double finalPrice = DiscountedPrice(basePrice);
$basePrice = $this->quantity * $this->itemPrice;
$seasonDiscount = $this->getSeasonalDiscount();
$fees = $this->getFees();
$finalPrice = $this->discountedPrice($basePrice, $seasonDiscount, $fees);
$basePrice = $this->quantity * $this->itemPrice;
$finalPrice = $this->discountedPrice($basePrice);
basePrice = quantity * itemPrice
seasonalDiscount = self.getSeasonalDiscount()
fees = self.getFees()
finalPrice = discountedPrice(basePrice, seasonalDiscount, fees)
basePrice = quantity * itemPrice
finalPrice = discountedPrice(basePrice)
let basePrice = quantity * itemPrice;
const seasonDiscount = this.getSeasonalDiscount();
const fees = this.getFees();
const finalPrice = discountedPrice(basePrice, seasonDiscount, fees);
let basePrice = quantity * itemPrice;
let finalPrice = discountedPrice(basePrice);
Причины рефакторинга
В длинном списке параметров зачастую крайне сложно ориентироваться. Кроме того, вызовы таких методов часто превращаются в целую вереницу вычислений значений, которые будут передаваться в метод. Вот почему если значения параметра может быть вычислено при помощи вызова какого-то метода, это следует сделать внутри самого метода, а от параметра избавиться.
Достоинства
- Избавляемся от лишних параметров, упрощая вызовы методов. Эти параметры зачастую создаются как задел на будущее (которое может так и не наступить).
Недостатки
- Параметр может понадобиться завтра для каких-то других целей и метод придётся переписать.
Порядок рефакторинга
-
Убедитесь, что код получения значения не использует параметров из текущего метода. Это важно, так как параметры текущего метода будут недоступны внутри другого метода, из-за чего перенос станет невозможен.
-
Если код получения значения сложнее, чем один вызов какого-то метода или функции, примените извлечение метода, чтобы выделить этот код в новый метод и сделать вызов простым.
-
В коде главного метода замените все обращения к заменяемому параметру вызовами метода получения значения.
-
Используйте удаление параметра, чтобы удалить неиспользуемый теперь параметр.