VIPERПереходы и передача данных межу модулями
Автор
Зарембо Андрей
Ведущий iOS разработчик
Rambler&Co
Переходы и передача данных между модулями
Подход MutualMobile
Передача данных через Segue
Конфигурация модулей в Router
Передача данных в Presenter
Двусторонняя передача данных и ViperMcFlurry
Путь данных в модуль Путь данных из модуля
Interactor
View Controller
Presenter
Wireframe Interactor
View Controller
Presenter
Wireframe
Переход между модулями
Interactor
View Controller
Presenter
Wireframe Interactor
View Controller
Presenter
Wireframe
Эти зависимости все время находятся в памяти
Возвращение Segues
Module A Assembly
Router
View Controller
Presenter
Interactor
View Controller
Presenter
Interactor
Segue
Module B Assembly
[self.view performSegueWithIdentifier:@"..." sender:data];
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { ... bModuleViewController.data = sender ...
AModuleRouter.m
AModuleViewController.m
Router
View Controller
Presenter
Interactor
View Controller
Presenter
Interactor
Segue
Путь данных при использовании Segues
Путь данных
ConfigBlock block = ^(viewControllerB){ ... viewControllerB.data = sender ... } [self.view performSegueWithIdentifier:@"..." sender:block];
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { ... ConfigBlock block = (ConfigBlock)sender block(segue.destinationViewController) ...
AModuleRouter.m
ModuleViewController.m
[self.view performSegueWithId:@"..." configurationBlock:^(viewControllerB){ ... viewControllerB.data = sender ... }];
AModuleRouter.m
Router
View Controller
Presenter
Interactor
View Controller
Presenter
Interactor
Segue
Добавляем блок конфигурации в Router
Путь данных
Router
Interactor
Segue
Передача данных сразу в Presenter
Путь данных
Presenter
View Controller
Presenter
Interactor
View Controller
<TransitionHandler>
Router
Interactor
Segue
Передача данных сразу в Presenter
Путь данных
Presenter
View Controller
Presenter
Interactor
View Controller
<ModuleConfigurator>
<TransitionHandler>
Router
Interactor
Segue
Передача данных сразу в Presenter
Путь данных
Presenter
View Controller
Presenter
Interactor
View Controller
<ModuleConfigurationHolder>
<ModuleConfigurator>
<TransitionHandler>
Router
Interactor
Segue
Передача данных сразу в Presenter
Путь данных
Presenter
View Controller
Presenter
Interactor
View Controller
[[self.transitionHandler initModuleFromSegue:@"..."] thenConfigureWithBlock: ^(id<ModuleBConfigurator> moduleBConfigurator){ … moduleBConfigurator.data = sender … }];
AModuleRouter.m
На освоение библиотеки уходило до 2х дней
Обновляем протоколы
ModuleInput
ConfigurationHolder View Controller B
TransitionHandler View Controller A
ModuleConfigurator Presenter B
Возвращает Presenter как ModuleInput
ModuleOutput Presenter A
<ModuleConfigurationHolder>
<ModuleConfigurator>
<TransitionHandler>
Router
Interactor
Segue
Двусторонняя передача данных в ViperMcFlurry
Путь данных
Presenter
View Controller
Presenter
Interactor
View Controller
<TransitionHandler>
<ModuleBInput>
<TransitionHandler>
Router
Interactor
Segue
Двусторонняя передача данных в ViperMcFlurry
Presenter
View Controller
Presenter
Interactor
View Controller
Путь данных из модуляПуть данных в модуль
[[self.transitionHandler openModuleUsingSegue:@"…"] thenChainUsingBlock: ^id<ModuleBOutput>(id<ModuleBInput> moduleInput){ … [moduleInput moduleConfigurationMethod]; … return self.moduleBoutput; }];
AModuleRouter.m
Viper Mc Flurry
https://github.com/rambler-ios/ViperMcFlurry.git
Вход и выход у каждого модуля
Переходы целиком в Router
Segue для переходов
Визуальная связь между модулями
Данные из Presenter в Presenter
Работа с MVC-экранами
Rambler Segues / Cross Storyboard Segue
Storyboard A
Storyboard B
RestorationID: «StoryboardB@ViewControllerB»
SeguePlaceholder View ControllerView Controller A
View Controller B
Rambler Segues / Embed Segue
View Controller A
Embed SegueView Controller B
ModuleB Container
Вызывается через PerformSegue
Контейнер запрашивается по ID Segue
Ссылки на библиотеки:
https://github.com/rambler-ios/ViperMcFlurry.git
https://github.com/rambler-ios/RamblerSegues.git
Спасибо