Рефакторинг - это процесс изменения внутренней структуры исходного кода программы с целью облегчить ее понимание для программиста, при этом не затрагивая её внешнего поведения и логики работы.
Основой рефакторинга является последовательность небольших изменений в коде. С каждым изменением код становится чище и понятней для программиста. Рефакторинг способствует не только улучшению визуального восприятия и понимания кода программистом, но и снижению количества ошибок, их нахождение и исправление, хоть это и не входит в привычное понимание целей применения рефакторинга. Стоит понимать, что рефакторинг не делает программу производительней, не увеличивает скорость ее работы, так как вся логика и поведение программы не изменяется.
Рефакторинг следует производить поэтапно и постоянно при разработке программы. Он поможет преодолевать трудности при командной разработке. Видимые проблемы, которые обычно приводят к необходимости произвести рефакторинг следующие:
- Дублирование исходного кода
- Большой метод или класс
- Длинный список параметров метода
- Временные и ненужные переменные и комментарии
- Плохосгруппированные данные
Наиболее употребимые методы рефакторинга:
- Изменение сигнатуры метода (Change Method Signature)
- Инкапсуляция поля (Encapsulate Field)
- Выделение класса (Extract Class)
- Выделение интерфейса (Extract Interface)
- Выделение локальной переменной (Extract Local Variable)
- Выделение метода (Extract Method)
- Генерализация типа (Generalize Type)
- Встраивание (Inline)
- Введение фабрики (Introduce Factory)
- Введение параметра (Introduce Parameter)
- Подъём метода (Pull Up Method)
- Спуск метода (Push Down Method)
- Переименование метода (Rename Method)
- Перемещение метода (Move Method)
- Замена условного оператора полиморфизмом (Replace Conditional with Polymorphism)
- Замена наследования делегированием (Replace Inheritance with Delegation)
- Замена кода типа подклассами (Replace Type Code with Subclasses)
- Изменение сигнатуры метода (Change Method Signature)
Часто ненужно рефакторить код, если он не влияет не работу программы. Зачем трогать что прекрасно работает.