Ответ
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 можно легко встраивать в разные потоки навигации.