Open serkrapiv opened 8 years ago
Не вижу пока ничего плохого в том, что модули знают друг о друге. Это кажется довольно логичным, ведь именно модуль, по сути, определяет, куда и как с него можно уйти. Добавлять для этого каких-то верхнеуровневых чуваков с размытой ответственностью вместо композитных роутеров - ну хз.
В VIPER есть понятие сабмодуля. Соответственно если есть сабмодуль, то почему не может быть супермодуля? Супермодуль может управлять навигацией модулей-экранов, при этом сами экраны не будут знать о переходах на другие экраны. Супермодуль - это такой же VIPER-модуль, префикс "супер" просто семантический. Это может быть полезно в ситуациях, когда в зависимости от каких-то условий одно и то же действие пользователя на одном экране может приводить к открытию различных других экранов. Также это полезно для переиспользуемости модулей и облегчает их комбинирование.
Андрей Панов из Avito на разных конференциях рассказывает о концепции Application Coordinator'a. Эта штука, в которой централизуется процесс переходов между модулями приложения. Она позволяет уйти от того, что модулям необходимо знать друг о друге: они сообщают о желании перейти на другой модуль и передать в него данные этому самому координатору, а тот уже знает на какой экран и как надо переходить.
Вброс на подумать: может ли такая концепция пригодиться нам в VIPER для каких-нибудь случаев?
Слайды тут: https://speakerdeck.com/andreypanov/introducing-application-coordinators
Код тут: https://github.com/AndreyPanov/ApplicationCoordinator