Какие существуют антипаттерны в разработке?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
-
God Object (Объект-бог): Класс, который содержит слишком много функциональности, знаний и обязанностей других классов. Сложён для понимания, тестирования и поддержки.
-
Magic Strings/Numbers (Магические строки/числа): Использование "волшебных", необъяснимых строковых или числовых литералов напрямую в коде без присвоения им осмысленных констант. Ухудшает читаемость и усложняет изменение.
-
Hardcoding (Жёсткое кодирование): Встраивание конкретных значений (путей к файлам, настроек, URL адресов API) непосредственно в код, вместо использования конфигурационных файлов или констант. Затрудняет развёртывание и изменение окружения.
-
Duplicate Code (Дублирующийся код): Повторение одних и тех же или очень похожих фрагментов кода в разных местах. Усложняет поддержку, тестирование и внесение изменений.
-
Tight Coupling (Сильная связанность): Объекты или модули сильно зависят друг от друга. Изменение в одном компоненте может привести к неожиданным изменениям в другом. Снижает гибкость и возможность повторного использования.
-
Вложенность if/else/switch (Nested Conditionals): Чрезмерное использование вложенных условных операторов, делающее код трудночитаемым и сложным для понимания логики выполнения.
-
Feature Envy (Зависть к фиче): Метод в одном классе сильно зависит от данных или методов другого класса, оперируя ими больше, чем своими собственными. Указывает на то, что метод, возможно, должен быть перемещён в другой класс.
-
Primitive Obsession (Наваждение примитивами): Использование примитивных типов данных (например, Int, String) для представления более сложных понятий без создания выделенных объектов или структур. Снижает выразительность кода и может привести к ошибкам из-за отсутствия валидации и инкапсуляции.
-
Boat Anchor (Якорь): Класс или функция, которые больше не используются, но оставлены в коде "на всякий случай". Увеличивает размер кодовой базы и усложняет навигацию.
-
Излишнее комментирование (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
// ...
}
}