Антипаттерны

Антипаттерн — частая, узнаваемая ошибка проектирования, противоположность паттерну: не “проверенное хорошее решение”, а “известная плохая практика”, про которую стоит знать, чтобы избегать.

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. Регулярный рефакторинг небольшими шагами (см. тему «Техники рефакторинга») — лучшая защита.

🎤 Закрыл тему, если можешь объяснить:
• что такое God Object и Spaghetti Code на примерах;
• что такое Premature Optimization и почему её стоит избегать (если дошёл до 2-го слоя).