Gymterview
middle

Что такое антипаттерн? Какие антипаттерны вы знаете?

Антипаттерн – распространённый подход к решению проблемы, который является неэффективным или контрпродуктивным. В отличие от паттерна, антипаттерн описывает, как делать не надо.

Антипаттерн Описание
God Object Класс, знающий и делающий слишком много (нарушение SRP)
Spaghetti Code Запутанный код без структуры, сложно читать и поддерживать
Golden Hammer Использование одного инструмента для всех задач (“у меня есть молоток…”)
Copy-Paste Programming Дублирование кода вместо выделения общей логики
Premature Optimization Оптимизация до измерения производительности
Magic Numbers/Strings Литералы без имён: if (status == 3) вместо if (status == Status.APPROVED)
Cargo Cult Programming Использование паттернов/технологий без понимания зачем
Lava Flow Мёртвый код, который боятся удалить (“вдруг понадобится”)
Big Ball of Mud Система без различимой архитектуры
Poltergeist Классы с единственной ролью – передача вызова другому классу

Важное

  • Антипаттерны часто появляются из-за спешки, недостатка опыта или давления требований
  • God Object – самый частый; бороться через декомпозицию (SRP)
  • “Лучший код – удалённый код” – не бойтесь удалять Lava Flow

Частые ошибки

  • Рефакторинг ради рефакторинга – антипаттерн стоит исправлять, если он мешает, а не потому что “некрасиво”
  • Замена одного антипаттерна другим – God Object -> 50 микроклассов (Ravioli Code)

Как используется в 2026

  • Code review – основной инструмент выявления антипаттернов
  • Static analysis (SonarQube, SpotBugs) – автоматическое обнаружение God Object, дублирования
  • ArchUnit – архитектурные тесты для предотвращения нарушений

На собеседовании: назовите 3-4 антипаттерна с примерами из своего опыта. Интервьюер хочет видеть, что вы умеете распознавать проблемы в коде. Частая ошибка – перечислить антипаттерны списком, но не объяснить, как вы с ними боролись.