Также известен как Alternative Classes with Different Interfaces

Запах кода Альтернативные классы с разными интерфейсами

Симптомы и признаки

Два класса выполняют одинаковые функции, но имеют разные названия методов.

Причины появления

Программист, который создал один из классов, скорей всего, не знал о том, что в программе уже существует аналогичный по функциям класс.

Лечение

Постарайтесь привести интерфейс классов к общему знаменателю:

  • Переименуйте методы так, чтобы они стали одинаковыми во всех альтернативных классах.

  • Используйте «перемещение метода» (Move method), добавление параметра и параметризацию метода для того, чтобы сигнатура и реализация методов стали одинаковыми.

  • Если только часть функциональности классов идентична, попробуйте извлечь эту часть в общий суперкласс. Существующие классы в этом случае станут подклассами.

  • После того, как вы определились с вариантом «лечения» и осуществили его, подумайте, возможно, один из классов теперь можно удалить.

Выигрыш

  • Вы избавляетесь от ненужного дублирования кода, и, таким образом, уменьшаете его размер.
  • Повышается читабельность кода, улучшается его понимание. Вам больше не придется гадать, зачем создавался второй класс, выполняющий точно такие же функции, как и первый.

Не стоит трогать, если...

  • Иногда объединить классы оказывается невозможно либо настолько сложно, что смысла заниматься этой работой нет. Один из примеров — альтернативные классы находятся в двух разных библиотеках, каждая из которых имеет свою версию класса.

Устали читать?

Сбегайте за подушкой, у нас тут контента на 7 часов чтения.

Или попробуйте наш новый интерактивный курс по рефакторингу. Он более информативный и гораздо более интересный, чем банальный текст.

Узнать больше...