
- •Лабораторная работа №6 Рефакторинг программного кода
- •Ход выполнения работы
- •Длинный Метод
- •Большой класс
- •Длинный список параметров
- •Расходящееся изменение
- •Хирургия дробовиком
- •Зависть по функции
- •Группы данных
- •Одержимость примитивами
- •Оператор Switch (Case)
- •Параллельные иерархии наследования
- •Ленивый класс
- •Спекулятивное обобщение
- •Временное поле
- •Цепочка сообщений
- •Посредник
- •Неоправданная близость
- •Альтернативные классы с разными интерфейсами
- •Неполный библиотечный класс
- •Класс для данных
- •Отвергнутое наследство
- •Комментарии
- •Классификация шаблонов рефакторинга
- •Примеры шаблонов рефакторинга
Примеры шаблонов рефакторинга
Добавление параметра (Add Parameter)
Методу необходимо больше информации от вызывающего.
Следует добавить параметр для переброски этой информации.
Инкапсуляция коллекции (Encapsulate Collection)
Один из методов возвращает коллекцию.
Преобразуйте возвращаемое значение в доступный для чтения вид и организуйте методы добавления и удаления.
Выделение интерфейса (Extract Interface)
Несколько клиентов используют одно и то же подмножество методов интерфейса класса. Или два класса содержат совподающие части интерфейса.
Выделите подмножество в отдельный интерфейс.
Выделение подкласса (Extract Subclass)
У класса есть особенности, которые используются только в некоторых экземплярах.
Создайте подкласс для этого набора особенностей.
Выделение родительского класса (Extract Superclass)
У вас есть два класса с одинаковыми особенностями.
Создайте базовый класс и переместите общие особенности в него.
Скрытие метода (Hide Method)
Метод не используется другими классами.
Сделайте метод закрытым.
Выделение класса (Extract Class)
У вас есть класс, работу которого стоило бы распределить между двумя.
Создайте новый класс и перенесите в него соответствующие поля и методы со старого класса.
Встраивание класса (Inline Class)
Класс мало что делает.
Переместите всю его функциональность в другой класс и удалите старый.