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 антипаттерна с примерами из своего опыта. Интервьюер хочет видеть, что вы умеете распознавать проблемы в коде. Частая ошибка – перечислить антипаттерны списком, но не объяснить, как вы с ними боролись.