Какую роль выполняет Router в архитектуре iOS-приложения?

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

Ответ

Router (или Coordinator) — это компонент, ответственный за навигацию и сборку модулей в приложении. Его основная цель — инкапсулировать логику переходов между экранами, отделяя её от бизнес-логики и UI.

Пример реализации (Coordinators):

protocol MainRouterProtocol {
    func showDetail(for product: Product)
    func showSettings()
}

class MainRouter: MainRouterProtocol {
    private let navigationController: UINavigationController

    init(navigationController: UINavigationController) {
        self.navigationController = navigationController
    }

    func showDetail(for product: Product) {
        // 1. Сборка модуля
        let detailVC = DetailConfigurator().configure(with: product)
        // 2. Выполнение перехода
        navigationController.pushViewController(detailVC, animated: true)
    }
}

Преимущества использования Router:

  • Уменьшение связанности: ViewController не знает о других экранах.
  • Централизованное управление навигацией: Все переходы в одном месте.
  • Поддержка глубоких ссылок (Deep Linking): Упрощает обработку URL-схем и универсальных ссылок.
  • Тестируемость: Логику переходов можно тестировать изолированно.
  • Повторное использование: ViewController можно легко встраивать в разные потоки навигации.