Антипаттерн — это распространенное, но неэффективное или вредное решение типовой проблемы, которое приводит к негативным последствиям.
Некоторые известные антипаттерны в Java-разработке:
- God Object (Объект-Бог): Класс, который выполняет слишком много функций, имеет слишком много зависимостей и слишком большой размер. Нарушает принцип единственной ответственности (SRP).
- Magic Strings/Numbers (Магические строки/числа): Использование строковых или числовых констант напрямую в коде вместо использования именованных констант или перечислений. Усложняет поддержку и рефакторинг.
- Hardcoding (Жесткое кодирование): Встраивание конфигурационных параметров, путей к файлам или других значений непосредственно в код вместо использования внешних источников (файлы конфигурации, переменные окружения).
- Spaghetti Code (Спагетти-код): Код с запутанной и неструктурированной логикой, множеством переходов (например,
goto - редко в современном Java, но метафорически применимо к сложным условиям и вызовам), что затрудняет понимание и изменение.
- Copy-Paste Programming (Программирование копированием и вставкой): Повторение одного и того же или похожего кода в нескольких местах вместо создания переиспользуемых функций или классов. Нарушает принцип DRY (Don't Repeat Yourself).
- Large Class (Большой класс): Класс, который имеет слишком много строк кода, методов и полей. Часто является следствием God Object, но может возникнуть и просто из-за недостаточного разделения ответственности.
- Feature Envy (Зависть к фиче, или Завистливая функция): Метод класса A, который слишком часто обращается к данным или поведению класса B, вместо того чтобы быть частью класса B. Указывает на неправильное размещение функциональности.
- Primitive Obsession (Навязчивое использование примитивов): Чрезмерное использование примитивных типов (например,
int, String) для представления понятий предметной области вместо создания специальных классов-объектов значений (Value Objects). Например, представлять денежную сумму как double вместо класса Money.
- Dead Code (Мертвый код): Код, который никогда не выполняется (не вызывается, недостижим). Засоряет базу кода и усложняет понимание.
- Excessive Coupling (Чрезмерная связанность): Классы или модули, которые слишком сильно зависят друг от друга. Изменение одного компонента требует изменений во многих других.
- Laid-Back Framework (Ленивый фреймворк): Создание собственного, неполноценного фреймворка или библиотеки для решения проблемы, для которой уже существуют зрелые и общепринятые решения.
Понимание и избегание этих антипаттернов улучшает качество кода, его поддерживаемость и расширяемость.