Длинный список параметров
Симптомы и признаки
Количество параметров метода больше трёх-четырёх.
Причины появления
Длинный список параметров может появиться после объединения нескольких вариантов алгоритмов в одном методе. В этом случае может быть создан длинный список параметров, контролирующих то, какая из вариаций будет выполнена и как.
Появление длинного списка параметров также может быть связано с попыткой программиста уменьшить связанность между классами. Например, код создания конкретных объектов, нужных в методе, переместили из самого метода в код вызова этого метода, причём созданные объекты передаются в метод как параметры. Таким образом, оригинальный класс перестал знать о связях между объектами, и связность уменьшилась.
Но если таких объектов нужно создать несколько, под каждый из них потребуется свой параметр, что приводит к разрастанию списка параметров.
В длинных списках параметров трудно разбираться, они становятся противоречивыми и сложными в использовании. Вместо длинного списка параметров метод может использовать данные своего собственного объекта. Если всех необходимых данных в текущем объекте нет, в качестве параметра метода можно передать другой объект, который получит недостающие данные.
Лечение
-
Если данные, передаваемые в метод, можно получить путём вызова метода другого объекта, применяем замену параметра вызовом метода. Этот объект может быть помещён в поле собственного класса либо передан как параметр метода.
-
Вместо того чтобы передавать группу данных, полученных из другого объекта в качестве параметров, в метод можно передать сам объект, используя передачу всего объекта.
-
Если есть несколько несвязанных элементов данных, иногда их можно объединить в один объект-параметр, применив замену параметров объектом.
Выигрыш
-
Повышает читабельность кода, уменьшает его размер.
-
В процессе рефакторинга вы можете обнаружить дублирование кода, которое ранее было незаметно.
Не стоит трогать, если...
- Не стоит избавляться от параметров, если при этом появляется нежелательная связанность между классами.