Какие вредные привычки в коде встречаются у iOS-разработчиков?

«Какие вредные привычки в коде встречаются у iOS-разработчиков?» — вопрос из категории Софт-скиллы, который задают на 10% собеседований IOS Разработчик. Ниже — развёрнутый пример ответа, который можно адаптировать под свой опыт.

Ответ

Распространённые антипаттерны и плохие практики в iOS-разработке:

  1. Жёсткие зависимости (Tight Coupling) Классы напрямую зависят от конкретных реализаций, что усложняет тестирование и замену компонентов.

    // ❌ Плохо: Прямое создание зависимости
    class DataService {
        let networkManager = NetworkManager()
    }
    
    // ✅ Лучше: Внедрение зависимости через протокол
    protocol NetworkManaging {
        func fetchData() -> Data
    }
    
    class DataService {
        let networkManager: NetworkManaging
        init(networkManager: NetworkManaging) {
            self.networkManager = networkManager
        }
    }
  2. Массивные ViewController'ы (Massive View Controller) Нарушение принципа единственной ответственности (SRP). Логику нужно выносить в отдельные сервисы, интеракторы или презентеры.

  3. Небезопасное приведение типов и игнорирование ошибок Использование try!, as! без должной обработки приводит к крашам.

    // ❌ Плохо
    let forcedValue = try! dangerousOperation()
    let string = object as! String
    
    // ✅ Лучше
    do {
        let value = try dangerousOperation()
    } catch {
        // Обработка ошибки
    }
    if let string = object as? String {
        // Безопасная работа со string
    }
  4. Злоупотребление глобальным состоянием Чрезмерное использование синглтонов, UserDefaults.standard или глобальных переменных усложняет отслеживание состояния и тестирование.

  5. Отсутствие модульного тестирования Приводит к хрупкому коду, который сложно рефакторить и поддерживать.