Заміна параметрів об'єктом
Проблема
У ваших методах зустрічається група параметрів, що повторюється.
Рішення
Замініть ці параметри об’єктом.
Причини рефакторингу
Однакові групи параметрів частенько зустрічаються не в єдиному методі. Це призводить до дублювання коду, як самих параметрів, так і частих операцій над ними. Як тільки ви зведете параметри в одному класі, ви зможете перемістити туди і методи обробки цих даних, очистивши від цього коду інші методи.
Переваги
-
Покращує читабельність коду. Замість пачки різноманітних параметрів ви бачите один об’єкт із зрозумілою назвою.
-
Однакові групи параметрів тут і там створюють особливий рід дублювання коду, при якому начебто не відбувається виклику ідентичного коду, але весь час зустрічаються однакові групи параметрів і аргументів.
Недоліки
- Якщо ви перемістили в новий клас лише дані і не плануєте переміщати в нього ніяких операцій над цими даними — це може тхнути класами даних.
Порядок рефакторингу
-
Створіть новий клас, який представлятиме вашу групу параметрів. Зробіть так, щоб дані об’єктів цього класу не можна було змінити після створення (make classes immutable).
-
В метод, до якого застосовується рефакторинг, додайте новий параметр, у якому передаватиметься ваш об’єкт-параметр. В усіх викликах методу передавайте в цей параметр об’єкт, що створюється із старих параметрів методу.
-
Тепер починайте по одному видаляти старі параметри з методу, замінюючи їх в коді полями об’єкта-параметра. Тестуйте програму після кожної заміни параметра.
-
По закінченню оцініть, чи є можливість і сенс перенести якусь частину методу (а іноді і весь метод) в клас об’єкта-параметра. Якщо так, використайте переміщення методу або відокремлення методу, щоб здійснити перенесення.