Страницы

Поиск по вопросам

понедельник, 8 апреля 2019 г.

Одному фрагменту один презентер?

Есть активити у которого 3-4 фрагмента .Для каждого из низ надо создать View и Presenter?или Несколько View можно привязать к одному презентеру?


Ответ

Ответ может быть дан только тогда, когда вы сами архитектурно примите решение, я постараюсь помочь:
Согласно MVP по структуре у вас у каждой view должен быть свой pesenter, логично. В нашем случае нужно просто решить что такое View, если к примеру у вас activity, то фрагменты в таком случае часто называют subView, и они будут являться дополнением основной View кое у вас Activity, тогда у них будет общий presenter. На самом деле в небольших проектах я бы делал именно так, будет меньше зависимостей, генерируемого кода, интерфейсов, и легче будет построить логику между фрагментами, хотя такую зависимость лучше избегать, но... Presenter этой view (activity) разрастеться, и потом будет тяжело расщеплять эти куски, также такая паутина будет тяжелее тестироваться, ну опять же если проект большой. Чтоб убедить, что такой подход довольно частый, гугл его предлагает во время аттестации и описывает в stable blue prints MVP.
Другой очевидный вариант, что activity выступает в роли View, а каждый фрагмент это тоже View, что тоже вполне логично, тогда нужно будет делать для них отдельные presenter. Те будет View(Activity) -> Presenter, View(Fragment) -> Presenter. Плюсы будут в том что такие фрагменты будут полностью независимы, и у нас не будет такого God object в роли жирного Presenter с логикой всех фрагментов внутри. Такой код легче будет поддерживать и тестировать, фрагменты можно использовать правильно по их назначению в других местах приложениях, как угодно при этом придется поправить только поведение, те в Java эту роль берет интерфейс. Проблема есть только в начальной структуре, например в Dagger2 чтоб выстроить такой граф нужно время и умение. Те по сути вы жертвуете начальным временем, чтоб решить какое будет поведение и всё. Такой подход я считаю более правильным, но его почему-то реже видно в исходниках или примерах в сети.

Комментариев нет:

Отправить комментарий