Autumn SALE

Довгий список параметрів

Також відомий як: Long Parameter List

Симптоми і ознаки

Кількість параметрів методу більше трьох-чотирьох.

Причини появи

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

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

Але якщо з’являється потреба в декількох таких об’єктах, для кожного з них знадобиться свій власний параметр, що призводить до розростання списку параметрів.

У довгих списках параметрів важко орієнтуватися, вони стають суперечливими і складними у використанні. Замість довгого списку параметрів метод може використовувати дані свого власного об’єкта. Якщо всіх необхідних даних в поточному об’єкті немає, в якості параметра методу можна передати інший об’єкт, який отримає відсутні дані.

Лікування

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

  • Замість того щоби передавати групу даних, отриманих з іншого об’єкта в якості параметрів, можна передати в метод сам об’єкт, використовуючи передачу всього об’єкта.

  • Якщо є декілька незв’язаних елементів даних, іноді їх можна об’єднати в один об’єкт-параметр, застосувавши для цього заміну параметрів об’єктом.

Виграш

  • Підвищує читабельність коду, зменшує його розмір.

  • В процесі рефакторингу ви зможете виявити дублювання коду, яке раніше було непомітним.

Не варто чіпати, якщо...

  • Не варто позбавлятися від параметрів, якщо при цьому з’являється небажана зв’язаність між класами.