38 lines
3.4 KiB
Markdown
38 lines
3.4 KiB
Markdown
#рефакторинг #методы_рефакторинга
|
||
|
||
![[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]] |