Составление методов
Значительная часть рефакторинга посвящается правильному составлению методов. В большинстве случаев, корнем всех зол являются слишком длинные методы. Хитросплетения кода внутри такого метода, прячут логику выполнения и делают метод крайне сложным для понимания, а значит и изменения.
Рефакторинги этой группы призваны уменьшить сложность внутри метода, убрать дублирование кода и облегчить последующую работу с ним.
Проблема: У вас есть фрагмент кода, который можно сгруппировать.
Решение: Выделите участок кода в новый метод (или функцию) и вызовите этот метод вместо старого кода.
Проблема: Стоит использовать в том случае, когда тело метода очевиднее самого метода.
Решение: Замените вызовы метода его содержимым и удалите сам метод.
Проблема: У вас есть сложное для понимания выражение.
Решение: Поместите результат выражения или его части в отдельные переменные, поясняющие суть выражения.
Проблема: У вас есть временная переменная, которой присваивается результат простого выражения (и больше ничего).
Решение: Замените обращения к переменной этим выражением.
Проблема: Вы помещаете результат какого-то выражения в локальную переменную, чтобы использовать её далее в коде.
Решение: Выделите все выражение в отдельный метод и возвращайте результат из него. Замените использование вашей переменной вызовом метода. Новый метод может быть использован и в других методах.
Проблема: У вас есть локальная переменная, которая используется для хранения разных промежуточных значений внутри метода (за исключением переменных циклов).
Решение: Используйте разные переменные для разных значений. Каждая переменная должна отвечать только за одну определённую вещь.
Проблема: Параметру метода присваивается какое-то значение.
Решение: Вместо параметра воспользуйтесь новой локальной переменной.
Проблема: У вас есть длинный метод, в котором локальные переменные так сильно переплетены, что это делает невозможным применение «извлечения метода».
Решение: Преобразуйте метод в отдельный класс так, чтобы локальные переменные стали полями этого класса. После этого можно без труда разделить метод на части.
Проблема: Вы хотите заменить существующий алгоритм другим?
Решение: Замените тело метода, реализующего старый алгоритм, новым алгоритмом.