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