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

Поговорим об этом архитектурном паттерне, применительно к Android разработке.

Некоторое время назад, все довольствовались тем, что сам по себе Android подталкивает к использованию подобия MVC паттерна. Есть отдельно представления (View), контроллёры (Activity) и данные (Model). Это длилось ровно до тех пор, пока Android не вошёл в массы. Появились целые отделы Android разработки в крупных IT фирмах и, как следствие, эти отделы по старой привычке пошли внедрять направо и налево паттерны и подходы, к которым привыкли.

Но по началу встретили ожесточённое сопротивление свободных разработчиков. Это очень хорошо наблюдается по комментариям к статьям некоторой давности на том же habrahabr. Тем не менее использование паттернов, привычных коммерческой разработке, взяло верх.

Я тоже долго не принимал во внимание такие подходы. Потому что за всю мою практику мне не приходилось жалеть о том, что я что-то где-то не использовал. Тем не менее, при изучении тем о тестировании я столкнулся с одной важной вещью. Разделения слоёв в Android недостаточно для тестирования. У нас всегда получается слишком жирный Activity, который практически невозможно разорвать для тестирования отдельных модулей.

Это и подтолкнуло меня к изучению вопроса об использовании MVP в Android приложениях.

Разница MVP и MVC лучше всего описана в прикреплённой картинке.

Чтобы понять, как разбить приложение на эти слои, можно отталкиваться от следующего:

View слой — наши Activity. Имеют ссылку на Presenter, и всё что они делают — говорят своему presenter-у о том, что произошло какое-то событие. Как говорил мой наставник: “А что вьюха? Вьюха — она тупая.”

Presenter слой — является эдаким “middle man”, срединным слоем, который может и должен взаимодействовать с представлениями и моделью. Получает данный из модели и отдаёт их форматированные для представления. Именно он решает, как реагировать на событие из представления.

Model слой — тут всё просто. Это точка входа для доменных моделей (POJO, простых объектов Java, которые связаны с базой данных) и бизнес логики.
 
В следующей части я пошагово опишу, как реализовать этот паттерн в приложении и покажу это на RSS Collector.


Originally published at junior-freelancer-ru.weebly.com.