Android Action Architecture

1.

Android Action Architecture
Тайчинов Марат
2017

2.

Немного истории

3.

Clean Architecture. Теория

4.

Clean Architecture. Практика

5.

Clean Architecture. Практика

6.

Clean Architecture. Слой Presentation

7.

Clean Architecture. Слой Domain

8.

Clean Architecture. Слой Data

9.

ActionViews

10.

Clean Architecture. Схема работы данных

11.

ActionViews. Схема работы данных

12.

ActionViews. Схема работы данных

13.

ActionViews. Структура проекта

14.

ActionViews. Структура проекта

15.

ActionViews. Структура проекта

16.

Clean Architecture. UseCase
public 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. Presenter
public 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. Presenter
public void getEmployment() {
execute(
mEmploymentService.getFiltered(filter),
this::onGetEmployment
);
}

21.

ActionViews. Обработка response
private void onGetEmployment(
Employment employment) {
mView.setEmployment(employment);
}

22.

ActionViews

23.

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 шага к использованию ActionViews
1) 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
СПАСИБО ЗА
ВНИМАНИЕ!
English     Русский Правила