Архитектура VIPER: как получить информацию о возврате из модуля

У меня возникла проблема с возвратом некоторой информации из модуля, который был представлен другим модулем. В моем случае у меня есть два модуля: «Карта» и «Поиск». MapView уведомляет о том, что он хочет найти адрес, поэтому MapPresenter начинает действия, чтобы показать модуль поиска (его представление показано модально). Внутри модуля поиска я делаю текстовый поиск, получаю результаты, показываю его и выбираю. Этот выбор должен быть возвращен модулю карты. Как я могу достичь этого, не нарушая границ?

Принимая во внимание, и, пожалуйста, исправьте меня, если я ошибаюсь, что связь между модулями должна быть достигнута только путем маршрутизации (а не «прыжка» между модулями с уведомлениями, блоками завершения и т. Д.), Я реализовал этот сценарий:

гадюки-блок-схема (Извините, возможно, диаграмма последовательности будет лучше)

MapWireframe реализует обычный интерфейс, но также и тот, который я назвал MapModuleInput , поэтому, когда я начинаю действие поиска (синий), я перехожу к SearchWireframe используя MapWireframe реализующий этот интерфейс.

После этого в красном потоке в SearchView я начинаю поиск, он получает результаты от интерактора и т. Д. После этого представлены результаты, и пользователь выбирает один (зеленый), поэтому выбранный результат возвращается в карту через интерфейс MapModuleInput .

Итак, это правильно?

Спасибо!

Если я правильно понял, у вас есть «модуль» с поиском, он ищет с помощью интерактивного поиска, извлекает некоторые POI и возвращает этот результат в ведущий поиска. У вас есть проблема, которую вы можете избежать, вместо того, чтобы получать результаты в SearchPresenter, просто связывайтесь с картой и отправляете запрос, а затем используйте SearchInteractor в MapView, теперь вам не нужно отправлять объекты между модулями. Если вам нужно сделать это так, как вы нарисовали на диаграмме, используйте DataSource, например Core Data, чтобы сохранить огромные объекты и получить их позже в другом «модуле».

Interesting Posts

Увеличение UISlider на 0,2 в диапазоне от 0 до 2.0

Как отменить анимацию на основе блоков UIView?

данные быстрой синхронизации данных ядра базы данных mysql

Подпрограммы Google Analytics не отображаются

Как я могу получить код языка ISO в IOS?

В iOS, если пользователь userInteractionEnabled супервизора НЕТ, все подчиненные также отключены?

Архив не удался, из-за кода ошибки -1, хотя я могу создавать и устанавливать на своих устройствах с профилем разработки

Какая польза от iCloud Display Sets?

как конвертировать аудио CMSampleBufferRef в данные и воспроизводить аудио в другом устройстве с полученными данными

Стратегия выполнения многих запросов на геокодирование

Проблема с значком GPS при использовании параметра «Значительное изменение местоположения» и восприятия пользователя

Можем ли мы импортировать пакеты .apparchive в Xcode 4

Как удалить все объекты из моего постоянного хранилища в Core Data?

Партнерская программа iTunes: подтвердите, что покупка прошла успешно.

Если вы используете Xcode для создания iOS-калькулятора, как бы добавить десятичную кнопку?

Давайте будем гением компьютера.