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

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

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

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

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

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

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

Спасибо!

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

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

  • Вопросы о VIPER - Чистая архитектура
  • Внедрение архитектуры плагинов для iOS с использованием Bundles
  • Где разместить код анимации UIView в VIPER?
  • Основные данные на клиенте (iOS) для кэширования данных с сервера Стратегия
  • Получение состояния для уведомлений системы в iOS и OS X
  • Новая версия приложения iOS и поддержка 64-разрядных версий
  • xcode 5.1 - Неопределенные символы для архитектуры x86_64 (zbar)
  • Создание архива для выпуска XCode 4.6 с помощью телефонной заставки v 2.9 не выполняется
  • Какой фрагмент будет выбран iPhone
  • Плюсы / минусы для использования lua в качестве межплатформенного языка для SDK
  • CoreBluetooth: Как разработать код для многих характеристик (30 - 40)?
  • AVSpeechSynthesizer в фоновом режиме
  • PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.