Чистая архитектура - Роберт Мартин - Как подключить варианты использования

Я пытаюсь реализоватьЧистая Архитектура описанный Робертом Мартином. Конкретнее я пользуюсьVIPER которая является iOS-версией Чистой Архитектуры.

Проблема у меня заключается в следующем:

Пользователь начинает смотреть на карту с местами (булавками) на ней. Если он нажимает кнопку, пин-код сбрасывается, и он перенаправляется в другое представление, чтобы создать (или отредактировать, если это был щелчок существующим пин-кодом) место (или отменить). В этом другом представлении пользователь может редактировать информацию о месте и затем нажимать «назад» или «готово» (или «редактировать»). Если он нажимает «готово», PlaceDetailsViewController отправляет сообщение в PlaceDetailsPresenter с информацией о месте, а PlaceDetailsPresenter использует CreatePlaceInteractor для создания места. Этот интерактор возвращает GUID, который используется для идентификации места.

Если пользователь щелкает назад перед созданием места, он возвращается к карте, и выпавший булавка поднимается и удаляется (так как у него нет GUID, это новое место и исчезает). Если он щелкает назад после создания, пин остается там (потому что у него должен быть GUID).

Как мне все это подключить и где хранить информацию о месте (включая GUID)? Чтобы уточнить немного больше:

Кто должен сообщить MapPresenter, что булавка остается там или уходит? Это PlaceDetailsPresenter или я должен передать эту информацию в PlaceDetailsWireframe -> MapWireframe -> MapPresenter -> MapView?Прежде чем вернуться назад, где должен храниться этот GUID, в PlaceDetailsPresenter или PlaceDetailsViewController?

Прямо сейчас вот что у меня есть:

РЕДАКТИРОВАТЬ:

По сути, я думаю, что проблема в том, что VIPER пришел из Чистой архитектуры Роберта Мартина, и он имеет опыт работы в Web (Rails), поэтому он не особо задумывается о состоянии (или не указывает его в своих выступлениях).

В основном это мой вопрос, где должно храниться состояние, как должны взаимодействовать различные модули, должно ли это быть через каркас, или через базу данных, или через интеракторы, или через докладчики, взаимодействующие друг с другом, как здесьhttps://github.com/objcio/issue-13-viper-swift.

Ответы на вопрос(2)

Ваш ответ на вопрос