Почему MVC противоречит принципам SOLID

«Почему MVC противоречит принципам SOLID» — вопрос из категории Архитектура, который задают на 10% собеседований IOS Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

MVC часто нарушает SOLID, особенно принцип Single Responsibility. ViewController в iOS становится "массивным", так как объединяет логику представления и бизнес-логику. Это нарушает SRP (класс должен иметь одну причину для изменения).

Пример нарушения:

class ProfileViewController: UIViewController {
    // Нарушение: и данные, и обновление UI в одном классе
    func fetchUserData() {
        NetworkService.fetchUser { [weak self] user in
            self?.updateUI(with: user)
            self?.saveToDatabase(user)
        }
    }

    private func updateUI(with user: User) {...}
    private func saveToDatabase(_ user: User) {...}
}

Также часто нарушается Dependency Inversion - ViewController напрямую зависит от конкретных сервисов. Решение - разделение на отдельные компоненты (Presenter, Interactor) как в VIPER или MVVM.