Base/Knowledges/IT/Рефакторинг/Методы рефакторинга/Введение объекта параметра (Introduce Parameter Object).md
2026-02-23 19:52:05 +03:00

37 lines
3.5 KiB
Markdown
Raw 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 20241118073905.png]]
### **Проблема**
В методах встречается повторяющаяся группа параметров.
![[Pasted image 20241118074053.png]]
### **Решение**
Замените эти параметры объектом
![[Pasted image 20241118074106.png]]
### **Причины рефакторинга**
Одинаковые группы параметров зачастую встречаются не в единственном методе. Это приводит к дублированию кода, как самих параметров, так и частых операций над ними. Как только вы сведёте параметры в одном классе, вы сможете переместить туда и методы обработки этих данных, очистив от этого кода другие методы
### **Достоинства**
- Улучшает читабельность кода. Вместо пачки разнообразных параметров вы видите один объект с понятным названием.
- Одинаковые группы параметров тут и там создают особый род дублирования кода, при котором вроде бы не происходит вызова идентичного кода, но все время встречаются одинаковые группы параметров и аргументов.
### **Недостатки**
- Если вы переместили в новый класс только данные и не планируете перемещать в него никакие поведения и операции над этими данными, это может попахивать [[Классы данных]]
### **Порядок рефакторинга**
1. Создайте новый класс, который будет представлять вашу группу параметров. Сделайте так, чтобы данные объектов этого класса нельзя было изменить после создания
2. В методе, к которому применяем рефакторинг, добавьте новый параметр, в котором будет передаваться ваш объект-параметр. Во всех вызовах метода передавайте в этот параметр объект, создаваемый из старых параметров метода
3. Теперь начинайте по одному удалять старые параметры из метода, заменяя их в коде полями объекта-параметра. Тестируйте программу после каждой замены параметра
4. По окончанию оцените, есть ли возможность и смысл перенести какую-то часть метода (а иногда и весь метод) в класс объекта-параметра
### **Борется с запахом**
- [[Длинный список параметров]]
- [[Группы данных]]
- [[Одержимость примитивами]]
- [[Длинная функция]]
### **Ссылки**
- https://refactoring.guru/ru/introduce-parameter-object
- [[Мартин Фаулер - Рефакторинг кода на JavaScript]]