Autumn SALE

Заміна параметрів об'єктом

Також відомий як: Introduce Parameter Object

Проблема

У ваших методах зустрічається група параметрів, що повторюється.

Рішення

Замініть ці параметри об’єктом.

До
Introduce Parameter Object - Before
Після
Introduce Parameter Object - After

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

Однакові групи параметрів частенько зустрічаються не в єдиному методі. Це призводить до дублювання коду, як самих параметрів, так і частих операцій над ними. Як тільки ви зведете параметри в одному класі, ви зможете перемістити туди і методи обробки цих даних, очистивши від цього коду інші методи.

Переваги

  • Покращує читабельність коду. Замість пачки різноманітних параметрів ви бачите один об’єкт із зрозумілою назвою.

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

Недоліки

  • Якщо ви перемістили в новий клас лише дані і не плануєте переміщати в нього ніяких операцій над цими даними — це може тхнути класами даних.

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

  1. Створіть новий клас, який представлятиме вашу групу параметрів. Зробіть так, щоб дані об’єктів цього класу не можна було змінити після створення (make classes immutable).

  2. В метод, до якого застосовується рефакторинг, додайте новий параметр, у якому передаватиметься ваш об’єкт-параметр. В усіх викликах методу передавайте в цей параметр об’єкт, що створюється із старих параметрів методу.

  3. Тепер починайте по одному видаляти старі параметри з методу, замінюючи їх в коді полями об’єкта-параметра. Тестуйте програму після кожної заміни параметра.

  4. По закінченню оцініть, чи є можливість і сенс перенести якусь частину методу (а іноді і весь метод) в клас об’єкта-параметра. Якщо так, використайте переміщення методу або відокремлення методу, щоб здійснити перенесення.