AFAIK ничего не сообщил о MVP
, в котором говорится, что все должно быть сделано в Presenter
. Имеет смысл инкапсулировать логику, которая является общей для нескольких Presenters
в одном общем классе.
MVP
скорее образец, чем правило, написанное на камне. Поэтому, когда имеет смысл, вы можете немного отклониться от шаблона.
IMHO общий класс - это правильный подход.
Использование общего класса для обработки запросов к серверу также упрощает реализацию кэширования и аутентификации, например.
Есть два способа сделать связь между вашим Presenters
и общий класс:
- Вводит одноэлементный экземпляр вашего общего класса во все
Presenters
, которые нуждаются в данных. От ведущего вы можете вызвать метод в общем классе и зарегистрировать обратный вызов.
- Инжектируйте глобальный
EventBus
в общий класс и сгореть Event
(т.е. LoadDataEvent
) из соответствующего Presenters
и обрабатывать этот Event
в общем классе. Когда данные получены от бэкэнда, вы можете запустить другой Event
(то есть DataLoadedEvent
) из общего класса и обработать его в соответствующем Presenters
.
Решение 1, вероятно, легче осуществить, но у вас есть какой-то связи между общим классом и Presenter
(это не так уж плохо, если вы используете инъекции зависимостей).
Решение 2 требует немного больше кода (вы должны определить события), но обеспечивает большую гибкость и де-сцепление. Например, если вы создаете новый Presenter
, который также интересуется данными, вам просто нужно зарегистрировать обработчик для DataLoadedEvent
в Presenter, и все готово.
Упустите эти обе опции, на мой взгляд, я деился, чтобы пойти с опцией 1 .... В моем случае я должен сломать MVP-арку, поскольку это не помогает мне ............ – JAVAC