Антипаттерны
Антипаттерн — частая, узнаваемая ошибка проектирования, противоположность паттерну: не “проверенное хорошее решение”, а “известная плохая практика”, про которую стоит знать, чтобы избегать.
God Object (божественный объект) — один класс, который делает буквально всё:
class OrderManager {
void validateOrder() { ... }
void calculatePrice() { ... }
void saveToDatabase() { ... }
void sendEmail() { ... }
void generateInvoicePdf() { ... }
void processPayment() { ... }
// ещё 20 методов...
}
Прямое нарушение принципа единственной ответственности — см. тему «S — единственная ответственность».
Spaghetti Code (код-спагетти) — запутанная логика без чёткой структуры, где сложно проследить поток выполнения: глубоко вложенные if, методы, дёргающие друг друга в произвольном порядке, отсутствие чёткого разделения слоёв.
Copy-Paste Programming — копирование одного и того же куска кода в разные места вместо вынесения в общий метод. Один баг приходится чинить во всех скопированных местах сразу — и часто забывают про одно из них.
Копнуть глубже
Magic Numbers/Strings — захардкоженные значения без объяснения смысла (if (status == 3) — что такое 3?). Решение — именованные константы, см. тему «Чистый код — основы».
Anemic Domain Model — классы-данные без логики (только геттеры/сеттеры), а вся бизнес-логика свалена в отдельные “сервисы”. Формально не ошибка, но часто превращается в God Object на уровне сервисного слоя, и теряется суть ООП — объект, который сам знает, как себя вести.
Premature Optimization (преждевременная оптимизация) — усложнение кода ради производительности, которая ещё не доказанно нужна. Известная цитата Дональда Кнута: «преждевременная оптимизация — корень всех зол». Сначала пиши понятный код, оптимизируй только то место, которое реально оказалось узким местом (через профилирование, а не догадки).
Главный урок про все антипаттерны — они не появляются специально, а накапливаются постепенно: один “быстрый хак” под дедлайн, потом ещё один поверх него — и через полгода это God Object. Регулярный рефакторинг небольшими шагами (см. тему «Техники рефакторинга») — лучшая защита.
• что такое Premature Optimization и почему её стоит избегать (если дошёл до 2-го слоя).