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