Глянь мой новый курс по Git! Привет! Глянь мой новый курс по Git! Привет! Глянь мой новый курс по Git на GitByBit.com! Привет! Хочешь круто подтянуть Git? Глянь мой новый курс на GitByBit.com!

Длинный список параметров

Также известен как: Long Parameter List

Симптомы и признаки

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

Причины появления

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

Появление длинного списка параметров также может быть связано с попыткой программиста уменьшить связанность между классами. Например, код создания конкретных объектов, нужных в методе, переместили из самого метода в код вызова этого метода, причём созданные объекты передаются в метод как параметры. Таким образом, оригинальный класс перестал знать о связях между объектами, и связность уменьшилась.

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

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

Лечение

  • Если данные, передаваемые в метод, можно получить путём вызова метода другого объекта, применяем замену параметра вызовом метода. Этот объект может быть помещён в поле собственного класса либо передан как параметр метода.

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

  • Если есть несколько несвязанных элементов данных, иногда их можно объединить в один объект-параметр, применив замену параметров объектом.

Выигрыш

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

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

Не стоит трогать, если...

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