ivanvorobei
@ivanvorobei
iOS разработчик, канал https://t.me/sparrowcode

Как правильно реорганизовать архитектуру для корректного ARC (похоже на VIPER)?

bff074c696564eca8e54133ac98b1c4d.png
Немного пояснений по схеме
Assistent (что то похожее на interactor), но только смотрящее "в мир". Он слабо держит модуль Presenter, а так же имеет функции, которые видны всему приложению. Что то вроде "presentOnViewController" и "isCanShowNow". Концептуальные примеры.

Presenter, как я указал выше, держит strong ссылкой Assistant (зачем объясню ниже) и его функция понятна - конфигурирует ViewController и обрабатывает события из него.

VC - контроллер, держит strong ссылкой presenter

А теперь как выглядит цепочка взаимодействия: пользователь нажимает кнопку на VC - обработчик находится в Presenter. Из него уже идет обращение к Assistant, который дает ответ. На основе ответа presenter обновляет контролер. Все отлично.

Но вся эта схема -модуль. И по факту когда я его создаю - я создаю переменную. Например, SimpleAssistant.
Далее конфигурирую поля, если нужно, и вызываю "presentOnViewController" (понятное дело скрыто протоколом, Assistant не знает какой презентер, у него просто набор функций смотрящих в приложение). Контролер презентует и все супер.

Но есть подвох. Как только я создам объект Assistant - тут же умрет контроллер. Он еще не презентован и его никто не держит. Можно конечно сделать так, чтобы ассистент держал презентер, а презентер держал контроллер, но есть момент - как только закончится зона видимости ассистента (к примеру, я его инитил в селекторе) - умрет ассистент и презентер. Контроллер будет жить потому что он в стеке. Но работать корректно без презентера и ассистента не будет.

Предполагаю проблему в архитектуре, как правильно реорганизовать связи?
  • Вопрос задан
  • 198 просмотров
Пригласить эксперта
Ответы на вопрос 1
briahas
@briahas
ObjC, Swift, Python
Убрать стек?

Сделать надАсистент который будет держать/создавать остальные асистенты/модели_вьюконтроллеров?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы