droidcon moscow 2015. clean architecture и mvp. Алексей Макаров - zvooq
TRANSCRIPT
ПроблемаОтобразить
поисковой запрос на экране
Данные приходят из двух
источников (бд и API)
Позаботиться о анимации
Обновить ListView
Отобразить сообщение об
ошибке
Обработка смены ориентации
Обработка нажатия Отобразить
progress dialog при долгих операциях
Сколько строк кода займет один Fragment?
Показать сплеш при отсутствие
данных
Валидность поисковой строки
2
Что такое “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
Диаграмма классов