Пример реализации архитектуры SurfMVP.
Какие компоненты должны реализовать те или иные протоколы?
- ViewInput – реализует сама View, ссылку держит Presenter
- Данный протокол описывает методы, при помощи которых Presenter может управлять View, передавать данные, изменять состояния и так далее.
- ViewOutput – реализует Presenter, ссылку на него держит View
- Протокол описывает набор действий, которые могут произойти во View, и методы жизненного цикла, например, события взаимодействия пользователя с экраном.
- RouterInput – реализует Router, а ссылку на него держит Presenter
- Он является единственным ответственным за то, чтобы инициировать дальнейшую навигацию в приложении.
- ModuleInput – реализует Presenter
- Данный протокол должен содержать в себе методы, при помощи которых другой модуль, который держит ссылку на этот протокол, мог бы изменять состояния текущего модуля.
- ModuleOutput – реализует Presenter вызывающего модуля, ссылку держит Presenter вызываемого модуля
- ModuleOutput передается в Configurator вызываемого модуля и там устанавливается в Presenter. Содержит в себе методы модуля, которые влияют на поведение вызывающего модуля.
- ModuleTransitionable – реализует View, ссылку на него держит Router
- Это единственный «базовый» протокол в SurfMVP. Он нужен для того, чтобы предоставить Router набор методов для работы с навигацией по приложению.
Более подробную информацию о SurfMVP можешь найти:
- в статье на habr.com;
- в статье на github;
- либо прочитать про модификацию данной архитектуры с помощью координаторов.