Вопрос проверяет понимание разделения ответственности и организации навигации в MVVM-приложении.
Координаторы отвечают за навигацию и сценарии переходов между экранами. Они выносят логику переходов из ViewController и ViewModel. Это снижает связность и упрощает поддержку кода. ViewModel больше не знает, какие экраны открываются дальше.
В MVVM без координаторов навигационная логика часто оказывается во ViewController, из-за чего он разрастается и теряет свою основную роль.
Определение:
Координатор — это объект, который управляет навигацией и жизненным циклом экранов.
Координатор:
создает ViewController
связывает ViewController с ViewModel
выполняет переходы между экранами
После введения координаторов:
ViewController отвечает только за UI
ViewModel отвечает за бизнес-логику
навигация становится отдельной ответственностью
ViewModel сообщает о событии:
onLoginSuccess.accept(())
Координатор реагирует и выполняет переход:
func showMainScreen() {
navigationController.pushViewController(mainVC, animated: true)
}
Координаторы стоит использовать, когда приложение имеет сложную навигацию и несколько сценариев переходов между экранами.