CleanContacts
Clean contacts — это пример проекта, иллюстрирующий чистую архитектуру в гармонии. Также он содержит много других деталей, которые, возможно, будут полезны.
allprojects{
repositories{
mavenCentral()
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar', '*.har'])
implementation 'com.gitee.archermind-ti:data:1.0.0'
implementation 'com.gitee.archermind-ti:presentation:1.0.0'
implementation 'com.gitee.archermind-ti:domain:1.0.0-beta'
}
Проект разделён на 3 модуля:
Модель представления презентера реализована в 2 модулях. Модуль Java не использует зависимости с фреймворком.
public class MainPresenter extends Presenter<MainView> {
private final InteractorInvoker interactorInvoker;
private final GetContactsInteractor getContactsInteractor;
private final ListMapper<Contact, PresentationContact> listMapper;
public MainPresenter(InteractorInvoker interactorInvoker,
GetContactsInteractor getContactsInteractor,
ListMapper<Contact, PresentationContact> listMapper, CleanContactsViewInjector viewInjector) {
super(viewInjector);
this.interactorInvoker = interactorInvoker;
this.getContactsInteractor = getContactsInteractor;
this.listMapper = listMapper;
}
@Override
public void onViewAttached() {
getView().initUi();
}
public void onResume() {
refreshContactList();
}
}
В списке контактов при нажатии на контакт вы переходите к деталям. В списке контактов есть миниатюра изображения контакта. При переходе к DetailAbilitySlice изображение является общим элементом.
Инвокер интерактора теперь использует Future и обещания Java API, и у него есть некоторые преимущества перед предыдущей реализацией. Инвокер возвращает Future<?> и вы можете отменить интерактор и получить результат интерактора синхронно.
public InteractorResponse<List<Contact>> call() {
return new Chain.Builder<List<Contact>>().typeChecker(contactListTypeChcker())
.providers(asList(localGateway(), networkGateway()))
.storers(singletonList(localGatewayStore()))
.build()
.obtain();
}
Базовый презентер использует «ViewInjector», который декорирует интерфейс View реализацией возврата основного потока с использованием аннотаций во время компиляции, поэтому каждый раз, когда вы вызываете «getView().XXXXX» в дочерних презентаторах, они используют эту декорированную версию и им не нужно обрабатывать возврат в поток пользовательского интерфейса самостоятельно.
new InteractorExecution<>(getContactInteractor).result(new InteractorResult<Contact>() {
@Override
public void onResult(Contact result) {
getView().showContactData(presentationContactMapper.map(result));
}
}).error(GetContactError.class, new InteractorResult<InteractorError>() {
@Override
public void onResult(InteractorError result) {
getView().showGetContactError();
}
}).execute(interactorInvoker);
=======
Copyright 2015 Christian Panadero Martinez
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )