Также известен как Introduce Parameter Object

Рефакторинг Замена параметров объектом

Проблема

В ваших методах встречается повторяющаяся группа параметров.

Решение

Замените эти параметры объектом.

До
Introduce Parameter Object - Before
После
Introduce Parameter Object - After

Причины рефакторинга

Одинаковые группы параметров зачастую встречаются не в единственном методе. Это приводит к дублированию кода, как самих параметров, так и частых операций над ними. Как только вы сведёте параметры в одном классе, вы сможете переместить туда и методы обработки этих данных, очистив от этого кода другие методы.

Достоинства

  • Улучшает читабельность кода. Вместо пачки разнообразных параметров вы видите один объект с понятным названием.

  • Одинаковые группы параметров тут и там создают особый род дублирования кода, при котором вроде бы не происходит вызова идентичного кода, но все время встречаются одинаковые группы параметров и аргументов.

Недостатки

  • Если вы переместили в новый класс только данные и не планируете перемещать в него никакие поведения и операции над этими данными, это может попахивать классами данных.

Порядок рефакторинга

  1. Создайте новый класс, который будет представлять вашу группу параметров. Сделайте так, чтобы данные объектов этого класса нельзя было изменить после создания.

  2. В методе, к которому применяем рефакторинг, добавьте новый параметр, в котором будет передаваться ваш объект-параметр. Во всех вызовах метода передавайте в этот параметр объект, создаваемый из старых параметров метода.

  3. Теперь начинайте по одному удалять старые параметры из метода, заменяя их в коде полями объекта-параметра. Тестируйте программу после каждой замены параметра.

  4. По окончанию оцените, есть ли возможность и смысл перенести какую-то часть метода (а иногда и весь метод) в класс объекта-параметра. Если так, используйте перемещение метода или извлечение метода, чтобы осуществить перенос.

Устали читать?

Сбегайте за подушкой, у нас тут контента на 7 часов чтения.

Или попробуйте наш интерактивный курс. Он гораздо более интересный, чем банальный текст.

Узнать больше...