MVP в Android приложении (Часть 2).

Много воды утекло с тех пор, как была написана Часть 1 по MVP в Android. Тем не менее пора снова браться за работу и продолжить с того момента, где я остановился в первой части.

Тестовое приложение представляет собой экран, с расположенными на нём элементами — текстовое поле (для ввода url), кнопка для запроса rss ленты, список для отображения ленты.

Этот пример (на начальном этапе) будет представлять собой исключительно реализацию паттерна MVP. Ведение разработки с помощью лямбд, RxAndroid, Retrofit и прочих фич обсудим немного позже.

Схема, примерно отображающая ситуацию с нашими будущими классами приведена ниже:

Рисунок. Ориентировочная схема классов в приложении
*** Конечно в самой схеме недостаточно методов и они не вполне корректны (к примеру, во view не хватает метода для нажатия на кнопку), но схема приведена в качестве примера. ***

Model: Возвращает нам список элементов из RSS подачи.

View: Позволяет получать данные из текстового поля, отображать данные и отображать ошибку. Имеет ссылку на presenter для передачи ему нажатия на кнопку “Get it”.

Presenter: Имеет ссылку на model и на view (через интерфейсы). При нажатии кнопки вызывает model и ждёт от неё данные. После получения данных — отображает их во view. В случае неудачи — отображает ошибку во view.

Первым делом создадим разметку для нашей Activity:

Рисунок. Разметка на основном экране

Следующий наш шаг: реализовать интерфейс для нашей Activity, который будет выглядеть вот так:

Рисунок. Интерфейс IView

Реализуем этот интерфейс в нашей Activity, но методы пока не наполняем кодом (сделаем это в дальнейшем):

Рисунок. Наша Activity

Переходим к созданию интерфейса model и его реализации. Здесь всё достаточно просто — всего один метод:

Рисунок. Model

После чего начинаем добавлять ссылки на нужные нам элементы в presenter и view следующим образом:

Рисунок. Наполнение view и presenter ссылками.

Остаётся дело за малым, это наполнить наши методы. Для этого мы можем следовать следующем правилам:

1. View может только отображать данные, полученные от presenter. Это значит вызовы методов showError и showData будут происходить ИСКЛЮЧИТЕЛЬНО из presentera.

2. View должна запрашивать данные через presenter. Это делается очень просто. В методе view onGetButtonClick мы делаем вызов presenter.onGetButtonClicked().

3. Model не должна иметь ссылку на presenter или view

В следующих статьях я буду добавлять в наш пример больше логики, а также продемонстрирую использование часто используемых подходов в разработке (применение Retrofit, Rx, ButterKnife, Acra и прочее)

Всех благ.