14
Droidcon Moscow 2015 Clean architecture and MVP Алексей Макаров

Droidcon Moscow 2015. Clean Architecture и MVP. Алексей Макаров - Zvooq

Embed Size (px)

Citation preview

Droidcon Moscow 2015

Clean architecture and MVPАлексей Макаров

ПроблемаОтобразить

поисковой запрос на экране

Данные приходят из двух

источников (бд и API)

Позаботиться о анимации

Обновить ListView

Отобразить сообщение об

ошибке

Обработка смены ориентации

Обработка нажатия Отобразить

progress dialog при долгих операциях

Сколько строк кода займет один Fragment?

Показать сплеш при отсутствие

данных

Валидность поисковой строки

2

3

Как это выглядит

База данных

Менеджер запросов

Бизнес логика

Fragment

Что такое “Clean architecture”?

Entities: Бизнес объекты приложения. Use Cases: Юзкейсы вашего приложения. Interface Adapters: Адаптеры, которые конвертируют данные для удобного использования в юзкейсах. Frameworks and Drivers: Пользовательский интерфейс, Базы данных.

4

MVP

Model содержит в себе данные

для отображения.

View пассивный интерфейс, который

отображает данные.

Presenter управляет данными из модели и

уведомляет View.

5

ViewИнтерфейс, который реализует Fragment,

Activity.

Реагирирует на события

пользователя и передает управление в presenter (onClick, события жизненного

цикла).

View как можно более пассивное, сценарий каждого действия отдается в

presenter.

6

7

Views

InstaListView

CommentListView

PostView

InstaListViewIml

CommentListViewImpl

PostViewImpl

Диаграмма классов

Presenter

8

Интерфейс, с которым взаимодействует View.

Не привязан к жизненному циклу.

Привязка презентера к view происходит через DI: 1) Простота тестирования 2) IoC

9

PresentersViews

InstaListView

CommentListView

PostView

InstaListViewIml

CommentListViewImpl

PostViewImpl

CommentViewPresenter

InstaListPresenterImpl

PostViewPresenter

InstaListPresenter

CommentViewPresenterImpl

PostViewPresenterImpl

Диаграмма классов

Model (Interactors)

Пользовательские сценарии/usecases.

Отсутствие callback’ов, механизм

подписки на результат.

Существуют в своих потоках - контроль количества потоков,

распределение операций по потокам.

Переиспользование кода.

10

11

Interactors

PresentersViews

InstaListView

CommentListView

PostView

InstaListViewIml

CommentListViewImpl

PostViewImpl

CommentViewPresenter

InstaListPresenterImpl

PostViewPresenter

InstaListPresenter

CommentViewPresenterImpl

PostViewPresenterImpl

EventManager

send events

Mappers

InstaListView

InstaListView

Диаграмма классов

Repository

12

Repository Impl

getPostById()

getPosts()

memory

cloud

disk

Скрытие реализации.

Возможность сокрытия логики кеширования,

логики обновления данных,

инкапсуляция хранения данных в разных хранилищах (sqllite, server, file

system, preferenses, run-

time).

13

Interactors

PresentersViews

Repository

InstaListView

CommentListView

PostView

InstaListViewIml

CommentListViewImpl

PostViewImpl

CommentViewPresenter

InstaListPresenterImpl

PostViewPresenter

InstaListPresenter

CommentViewPresenterImpl

PostViewPresenterImpl

EventManager

send events

Application    managers

Mappers

InstaPost

InstaComment

Диаграмма классов

Спасибо за внимание!

Макаров Алексей22 годаskype: metrolog_maYandex, Android разработчик