Base/Knowledges/IT/Рефакторинг/Методы рефакторинга/Замена параметра запросом (Replace Parameter with Query).md
2026-02-23 19:52:05 +03:00

38 lines
3.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#рефакторинг #методы_рефакторинга
![[Pasted image 20250212085614.png]]
### **Проблема**
Вызываем метод и передаем его результаты как параметры другого метода. При этом значение параметров могли бы быть получены и внутри вызываемого метода.
```typescript
let basePrice = quantity * itemPrice;
const seasonDiscount = this.getSeasonalDiscount();
const fees = this.getFees();
const finalPrice = discountedPrice(basePrice, seasonDiscount, fees);
```
### **Решение**
Вместо передачи значения через параметры метода, попробуйте переместить код получения значения внутрь самого метода.
```typescript
let basePrice = quantity * itemPrice;
let finalPrice = discountedPrice(basePrice);
```
### **Причины рефакторинга**
В длинном списке параметров зачастую крайне сложно ориентироваться. Кроме того, вызовы таких методов часто превращаются в целую вереницу вычислений значений, которые будут передаваться в метод. Вот почему если значения параметра может быть вычислено при помощи вызова какого-то метода, это следует сделать внутри самого метода, а от параметра избавиться.
### **Достоинства**
- Избавляемся от лишних параметров, упрощая вызовы методов. Эти параметры зачастую создаются как задел на будущее (которое может так и не наступить).
### **Недостатки**
- Параметр может понадобиться завтра для каких-то других целей и метод придётся переписать.
### **Порядок рефакторинга**
1. Убедитесь, что код получения значения не использует параметров из текущего метода. Это важно, так как параметры текущего метода будут недоступны внутри другого метода, из-за чего перенос станет невозможен.
2. Если код получения значения сложнее, чем один вызов какого-то метода или функции, примените [[Извлечение функции (Extract Function)]], чтобы выделить этот код в новый метод и сделать вызов простым.
3. В коде главного метода замените все обращения к заменяемому параметру вызовами метода получения значения.
4. Используйте удаление параметра, чтобы удалить неиспользуемый теперь параметр
### **Ссылки**
- https://refactoring.guru/ru/replace-parameter-with-method-call
- [[Мартин Фаулер - Рефакторинг кода на JavaScript]]