1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/archermind-ti-clean-contacts

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

CleanContacts

Введение в проект

Clean contacts — это пример проекта, иллюстрирующий чистую архитектуру в гармонии. Также он содержит много других деталей, которые, возможно, будут полезны.

Как начать работу с этим репозиторием

  1. Добавьте библиотеку в свой модуль build.gradle:
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 модуля:

  • entry (harmoney): содержит пользовательский интерфейс, внедрение зависимостей (конфигурацию) и детали реализации некоторых элементов, таких как шина и инвокер.
  • Presentation (Java): содержит презентеры (MVP) и контракт (интерфейс представления) для взаимодействия.
  • Domain (Java): содержит интеракторы и бизнес-логику.
  • Data (harmoney): реализация источников данных (сеть, BDD, общие настройки...)

Иллюстрация


MVP

Модель представления презентера реализована в 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 изображение является общим элементом.

Инвокер интерактора основан на Futures

Инвокер интерактора теперь использует 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();
    }

UI поток обрабатывается автоматически

Базовый презентер использует «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 )

Вы можете оставить комментарий после Вход в систему

Введение

Описание недоступно Развернуть Свернуть
Apache-2.0
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/archermind-ti-clean-contacts.git
git@api.gitlife.ru:oschina-mirror/archermind-ti-clean-contacts.git
oschina-mirror
archermind-ti-clean-contacts
archermind-ti-clean-contacts
master