Base/Knowledges/IT/Рефакторинг/Методы рефакторинга/Сохранение всего объекта (Preserve Whole Object).md
2026-02-23 19:52:05 +03:00

45 lines
3.3 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 20250212084935.png]]
### **Проблема**
Вы получаете несколько значений из объекта, а затем передаёте их в метод как параметры.
```typescript
let low = daysTempRange.getLow();
let high = daysTempRange.getHigh();
let withinPlan = plan.withinRange(low, high);
```
### **Решение**
Вместо этого передавайте весь объект.
```typescript
let withinPlan = plan.withinRange(daysTempRange);
```
### **Причины рефакторинга**
Проблема заключается в том, что перед вызовом вашего метода нужно каждый раз вызывать методы будущего объекта-параметра. Если способ вызова этих методов либо количество данных, получаемых для метода, поменяется, то изменения придётся искать и вносить в дюжину мест по всей программе.
Вместо этого код получения всех нужных данных может храниться одном месте — в самом методе.
### **Достоинства**
- Вместо пачки разнообразных параметров вы видите один объект с понятным названием
- Если методу понадобятся ещё какие-то данные из объекта, не нужно будет переписывать все места, где вызывается этот метод, а только лишь внутренности самого метода
### **Недостатки**
В некоторых случаях после такого преобразования метод теряет в универсальности, так как он мог получать данные из множества разных источников, а в результате рефакторинга мы ограничиваем круг его применения только для объектов с определённым интерфейсом.
### **Порядок рефакторинга**
1. Создайте параметр в методе для объекта, из которого можно получить нужные значения
2. Теперь начинайте по одному удалять старые параметры из метода, заменяя их в коде вызовами соответствующих методов объекта-параметра. Тестируйте программу после каждой замены параметра.
3. Удалите код получения значений из объекта-параметра, который стоял перед вызовом метода.
### **Борется с запахом**
- [[Одержимость примитивами]]
- [[Длинный список параметров]]
- [[Длинная функция]]
- [[Группы данных]]
### **Ссылки**
- https://refactoring.guru/ru/preserve-whole-object
- [[Мартин Фаулер - Рефакторинг кода на JavaScript]]