An open API service indexing awesome lists of open source software.

https://github.com/surfstudio/surf-mvp-example


https://github.com/surfstudio/surf-mvp-example

Last synced: 7 months ago
JSON representation

Awesome Lists containing this project

README

          

# SurfMVP Example

Пример реализации архитектуры 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](https://habr.com/ru/company/surfstudio/blog/485172/);
- в [статье на github](https://github.com/surfstudio/Surf-iOS-Developers/blob/master/ru/Docs/tech-stack/architectures/Surf_MVP.md);
- либо [прочитать](https://github.com/surfstudio/Surf-iOS-Developers/blob/master/ru/Docs/tech-stack/architectures/Surf_MVP_Coordinators.md) про модификацию данной архитектуры с помощью координаторов.