Similar presentations:
Android Action Architecture
1.
Android Action ArchitectureТайчинов Марат
2017
2.
Немного истории3.
Clean Architecture. Теория4.
Clean Architecture. Практика5.
Clean Architecture. Практика6.
Clean Architecture. Слой Presentation7.
Clean Architecture. Слой Domain8.
Clean Architecture. Слой Data9.
ActionViews10.
Clean Architecture. Схема работы данных11.
ActionViews. Схема работы данных12.
ActionViews. Схема работы данных13.
ActionViews. Структура проекта14.
ActionViews. Структура проекта15.
ActionViews. Структура проекта16.
Clean Architecture. UseCasepublic interface UseCase<P, R> {
interface Callback<R> {
void onSuccess(R object);
void onError(Throwable throwable);
}
void execute(P parameter, Callback<R> callback);
}
17.
Clean Architecture. UseCase@Override
public void execute(final Integer feedId,
final Callback<List<Article>> callback) {
try {
callback.onSuccess(
feedRepository.getFeedArticles(feedId));
} catch (final Throwable throwable) {
callback.onError(throwable);
}
}
18.
ActionViews. Presenterpublic void getEmployment() {
execute(
mEmploymentService.getFiltered(filter),
this::onGetEmployment
);
}
19.
ActionViews. Service@Override
public Observable<Employment>
getFiltered(Filter filter) {
return mRepository.getFiltered(filter)
.map(employment -> {
//... some work
});
}
20.
ActionViews. Presenterpublic void getEmployment() {
execute(
mEmploymentService.getFiltered(filter),
this::onGetEmployment
);
}
21.
ActionViews. Обработка responseprivate void onGetEmployment(
Employment employment) {
mView.setEmployment(employment);
}
22.
ActionViews23.
ActionViews. Как было доmCompositeSubscription.remove(mSubscription);
mSubscription =
mDataManager.getBlockedUsers(COUNT, mOffset)
.compose(RxUtil::async)
.compose(RxUtil.loading(mView))
.compose(RxUtil.emptyErrorStub(mErrorStubView))
.compose(RxUtil.errorNoInternet(mNoInternetView))
.subscribe(this::handleResponse,
RxUtil::errorNoAction);
mCompositeSubscription.add(mSubscription);
24.
ActionViews. Схема работы25.
ActionViews. Схема работы26.
Подключаем ActionView. XML<include layout="@layout/w_simple_empty_view"/>
27.
Подключаем ActionView. Код@Override public ErrorView getErrorView() {
return new ToastView(getContext());
}
@Override public EmptyView getEmptyView() {
return emptyView;
}
@Override public NoInternetView
getNoInternetView(){
return noInternetView;
}
28.
Подключаем ActionView. КодemptyView.setAnotherViews(mainLayout,
noInternetView, mainLoadingView);
noInternetView.setAnotherViews(mainLayout,
emptyView, mainLoadingView);
likeLoadingView.setAnotherViews(buttonLike);
mainLoadingView.setAnotherViews(mainLayout,
emptyView, noInternetView);
29.
4 шага к использованию ActionViews1) CustomView
2) xml
3) Код
4) AnotherViews
30.
ActionViews. Плюсы1) Нет boilerplate
2) Многопоточность уже реализована
3) Механизм ActionView
4) Своя реализация обработки ошибок
5) Удобные, готовые базовые классы
6) Простота и скорость
7) Кастомизация
8) Поддержка и доработка
31.
ActionViews. Минусы1) Тяжелая кастомизация
2) Порог вхождения
3) Усложненное тестирование
4) Документация
32.
Action ArchitectureСПАСИБО ЗА
ВНИМАНИЕ!