Рефакторинг - это процесс изменения внутренней структуры исходного кода программы с целью облегчить ее понимание для программиста, при этом не затрагивая её внешнего поведения и логики работы.

Основой рефакторинга является последовательность небольших изменений в коде. С каждым изменением код становится чище и понятней для программиста. Рефакторинг способствует не только улучшению визуального восприятия и понимания кода программистом, но и снижению количества ошибок, их нахождение и исправление, хоть это и не входит в привычное понимание целей применения рефакторинга. Стоит понимать, что рефакторинг не делает программу производительней, не увеличивает скорость ее работы, так как вся логика и поведение программы не изменяется.

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

  • Дублирование исходного кода
  • Большой метод или класс
  • Длинный список параметров метода
  • Временные и ненужные переменные и комментарии
  • Плохосгруппированные данные

Наиболее употребимые методы рефакторинга:

  • Изменение сигнатуры метода (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)