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

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

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

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

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

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

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

Спасибо!

One Solution collect form web for “Архитектура VIPER: как получить информацию о возврате из модуля”

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

  • Как отображать наложение поверх AVCaptureVideoPreviewLayer
  • Где разместить код анимации UIView в VIPER?
  • Когда приложение находится в фоновом режиме, AVAssetReader не сможет правильно инициализироваться, поэтому не может начать чтение
  • Xcode Warning: Игнорирование файла libxml2.2.dylib, созданного для неподдерживаемого формата файла, который не связан с архитектурой
  • Вопросы о VIPER - Чистая архитектура
  • Получить изображение с квадрата AVCaptureVideoPreviewLayer
  • Блокировать обратные вызовы или протоколы для передачи информации между DataManager и Interactor в VIPER?
  • План разработки мобильных приложений с REST Api - хорошая идея?
  • Как бороться с отсутствием рефлексии в Свифт?
  • Как добавить архитектуру armv6 в проект Xcode?
  • iOS VIPER: где ввести код проверки формы?
  • Interesting Posts

    Swift – Получите данные о глюкозе от Apple HealthKit

    Какие действия addTarget можно взять в UITextView?

    У Airplay с AVQueuePlayer есть пробелы

    Могу ли я использовать текстовое поле номер кредитной карты card.io в IOS в пользовательском Enter вручную?

    UICollectionView изменение макета выбранного элемента и рамки / ограничений

    performSelector: withObject: afterDelay: не делать вызов

    Ошибка Xcode 7 Git Setup: не удается автоматически определить адрес электронной почты

    Метод вызова аутентификации не вызывается при использовании пользовательского делегата NSURLSession

    Начало работы с MMDrawerController

    Завершение приложения при регистрации нового пользователя в QuickBlox из приложения ios

    Xcode использует схемы для определения URL-адресов dev / промежуточного / производственного сервера

    Как создать приложение на основе темы?

    Как ввести значение UITextField в виде нажатия клавиш?

    Можно ли реагировать на жест встряски в UIAlertView?

    Декодирование видеопотока h264 для получения буфера изображения

    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.