Упрощение вызовов методов

Эти рефакторинги делают вызовы методов проще и яснее для понимания. Это, в свою очередь, упрощает интерфейсы взаимодействия между классами.

Переименование метода

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

Решение: Измените название метода.

Добавление параметра

Проблема: Методу не хватает данных для осуществления каких-то действий.

Решение: Создайте новый параметр, чтобы передать эти данные.

Удаление параметра

Проблема: Параметр не используется в теле метода.

Решение: Удалите неиспользуемый параметр.

Разделение запроса и модификатора

Проблема: У вас есть метод, который возвращает какое-то значение, но при этом в процессе работы он изменяет что-то внутри объекта.

Решение: Разделите метод на два разных метода. Один из них пускай возвращает значение, а второй модифицирует объект.

Параметризация метода

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

Решение: Объедините все эти методы в один с параметром, в который будет передаваться отличающееся значение.

Замена параметра набором специализированных методов

Проблема: Метод разбит на части, каждая из которых выполняется в зависимости от значения какого-то параметра.

Решение: Извлеките отдельные части метода в собственные методы и вызывайте их вместо оригинального метода.

Передача всего объекта

Проблема: Вы получаете несколько значений из объекта, а затем передаёте их в метод как параметры.

Решение: Вместо этого передавайте весь объект.

Замена параметра вызовом метода

Проблема: Вызываем метод и передаем его результаты как параметры другого метода. При этом значение параметров могли бы быть получены и внутри вызываемого метода.

Решение: Вместо передачи значения через параметры метода, попробуйте переместить код получения значения внутрь самого метода.

Замена параметров объектом

Проблема: В ваших методах встречается повторяющаяся группа параметров.

Решение: Замените эти параметры объектом.

Удаление сеттера

Проблема: Значение поля должно быть установлено только в момент создания и больше никогда не меняться.

Решение: Удалите методы, устанавливающие значение этого поля.

Сокрытие метода

Проблема: Метод не используется другими классами либо используется только внутри своей иерархии классов.

Решение: Сделайте метод приватным или защищённым.

Замена конструктора фабричным методом

Проблема: У вас есть сложный конструктор, делающий нечто большее, чем простая установка значений полей объекта.

Решение: Создайте фабричный метод и замените им вызовы конструктора.

Замена кода ошибки исключением

Проблема: Метод возвращает определенное значение, которое будет сигнализировать об ошибке.

Решение: Вместе этого следует выбрасывать исключение.

Замена исключения проверкой условия

Проблема: Вы выбрасываете исключение там, где можно было бы обойтись простой проверкой условия.

Решение: Замените выбрасывание исключения проверкой этого условия.

Устали читать?

Сбегайте за подушкой, у нас тут контента на 7 часов чтения.

Или попробуйте наш новый интерактивный курс по рефакторингу. Он более информативный и гораздо более интересный, чем банальный текст.

Узнать больше...