Назад к вопросам
Middle+
83
questionbank

Какие существуют антипаттерны в разработке?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

  1. God Object (Объект-бог): Класс, который содержит слишком много функциональности, знаний и обязанностей других классов. Сложён для понимания, тестирования и поддержки.

  2. Magic Strings/Numbers (Магические строки/числа): Использование "волшебных", необъяснимых строковых или числовых литералов напрямую в коде без присвоения им осмысленных констант. Ухудшает читаемость и усложняет изменение.

  3. Hardcoding (Жёсткое кодирование): Встраивание конкретных значений (путей к файлам, настроек, URL адресов API) непосредственно в код, вместо использования конфигурационных файлов или констант. Затрудняет развёртывание и изменение окружения.

  4. Duplicate Code (Дублирующийся код): Повторение одних и тех же или очень похожих фрагментов кода в разных местах. Усложняет поддержку, тестирование и внесение изменений.

  5. Tight Coupling (Сильная связанность): Объекты или модули сильно зависят друг от друга. Изменение в одном компоненте может привести к неожиданным изменениям в другом. Снижает гибкость и возможность повторного использования.

  6. Вложенность if/else/switch (Nested Conditionals): Чрезмерное использование вложенных условных операторов, делающее код трудночитаемым и сложным для понимания логики выполнения.

  7. Feature Envy (Зависть к фиче): Метод в одном классе сильно зависит от данных или методов другого класса, оперируя ими больше, чем своими собственными. Указывает на то, что метод, возможно, должен быть перемещён в другой класс.

  8. Primitive Obsession (Наваждение примитивами): Использование примитивных типов данных (например, Int, String) для представления более сложных понятий без создания выделенных объектов или структур. Снижает выразительность кода и может привести к ошибкам из-за отсутствия валидации и инкапсуляции.

  9. Boat Anchor (Якорь): Класс или функция, которые больше не используются, но оставлены в коде "на всякий случай". Увеличивает размер кодовой базы и усложняет навигацию.

  10. Излишнее комментирование (Excessive Commenting): Комментирование очевидных вещей или использование комментариев вместо рефакторинга и улучшения читаемости кода.

// Пример Magic String
let userDefaultsKey = "lastUserName" // Лучше использовать константу

// Пример Duplicate Code
func processOrder(_ order: Order) {
    // Логика обработки заказа
    print("Processing order \(order.id)")
    // ...
}

func processRefund(_ refund: Refund) {
    // Похожая логика обработки
    print("Processing refund for order \(refund.orderId)")
    // ...
}

// Пример Tight Coupling
class OrderService {
    func placeOrder(user: User, products: [Product]) {
        let paymentProcessor = PaymentProcessor() // Сильная зависимость от PaymentProcessor
        // ...
    }
}