Рефакторинг кода

Недостатки кода
Повторяющийся код
Длинный метод
Большой класс
Длинный список параметров
Различное изменение класса
Изменение многих классов
Зависть к чужим членам
Пучки данных
Мания примитивизма
Операторы выбора
Параллельные иерархии наследования
Ленивый класс
Спекулятивная общность
Временное поле
Цепочки вызовов
Промежуточный сервер
Излишняя интимность
Альтернативные классы с разными интерфейсами
Неполный библиотечный класс
Класс данных
Отказ от наследства
Рефакторинги
Составление методов
Извлечение метода
Встраивание метода
Встраивание локальной переменной
Замена локальной переменной вызовом метода
Введение поясняющей переменной
Разделение локальной переменной
Избавление от присваивания параметрам
Избавление от метода с помощью объекта метода
Замена алгоритма
Перемещение членов между объектами
Перемещение метода
Перемещение поля
Извлечения класса
Встраивание класса
Скрытие делегирующего класса
Избавление от промежуточного сервера
Введение внешнего метода
Введение локального расширения
Организация данных
Внутренняя инкапсуляция
Замещение поля объектом
Замена встроенного объекта на связанный
Замена связанного объекта на встроенный
Замена массива на объект
Дублирование данных пользовательского интерфейса
Замена однонаправленной связи на двунаправленную
Замена двунаправленной связи на однонаправленную
Инкапсулирование поля
Инкапсулирование коллекции
Замена записи на класс
Замена кодирования типа классом
Замена кодирования типа подклассами
Замена кодирования типа состоянием/стратегией
Замена подкласса полем
Упрощение условных выражений
Декомпозиция условий
Объединение условий
Объединение фрагментов, не завясящих от условия
Избавление от флагов
Замена вставленных условий предохраняющими
Замена условия полиморфизмом
Введение NULL объекта
Введение предусловий
Упрощение вызовов методов
Переименование метода
Добавление параметра
Избавление от параметра
Разделение аксессора и модификатора
Введение параметра
Замена параметра набором методов
Передача объекта целиком
Замена параметра вызовом метода
Введение объекта параметров
Избавление от метода установки значений
Скрытие метода
Замена конструктора на метод фабрики
Скрытие приведения типов
Замена кода по выявлению ошибок на возбуждение исключения
Замена исключения на проверку условия
Работа с обобщениями
Поднятиие поля
Поднятие метода
Поднятие тела конструктора
Спускание метода
Спускание поля
Извлечение подкласса
Извлечение суперкласса
Извлечение интерфейса
Уничтожение иерархии
Формирование шаблонного метода
Замена наследования делегированием
Замена делегирования наследованием