Android-пейджинговая библиотека с чистой архитектурой - PullRequest
0 голосов
/ 27 мая 2018

Я пробовал библиотеку подкачки из Компонента архитектуры Android , но у меня есть сомнения по поводу ее интеграции в проект на основе чистой архитектуры.

Обычно у меня есть 3 модуля:

  • Основной модуль (приложение)
  • Модуль данных (модуль Android с зависимостями сети и базы данных)
  • Модуль домена (модуль Pure Kotlin)

Для того, чтобывведя нумерацию страниц, я должен был рассмотреть класс PagedList<T> как класс домена.(ИМО - не страшная идея, так как в конце концов это список, а источник данных абстрагирован)

Так что на уровне домена у меня может быть хранилище вроде:

interface ItemRepository {
    fun getItems():PagedList<Item>
}

А потомв модуле данных создайте реализацию, подобную этой:

class ItemRepositoryImpl: ItemRepositoy(private val factory:ItemDataSourceFavtory) {
    fun getItems():PagedList<Item> {

  val pageConfigurations = PagedList.Config.Builder()
            .setPageSize(10)
            .setInitialLoadSizeHint(15)
            .setPrefetchDistance(5)
            .setEnablePlaceholders(false)
            .build()

    return RxPagedListBuilder(locationDataSourceFactory, pageConfigurations)
            .setInitialLoadKey(1)
            .buildObservable()
}

Пока все хорошо.Я сомневаюсь, что когда нам нужно преобразовать модель доменов для уровня представления (скажем, мой элемент должен знать, если был отмечен флажок для отображения отмеченного значка), обычно я сопоставляю модель своего домена с презентацией.

Я знаю, DataSourceFactory имеет методы map и mapByPage, но фабрика находится на уровне данных.Моя Viewmodel использует данные из слоя модели, который в этом случае был бы PagedList, и, насколько я знаю, постраничный список не поддерживает сопоставление.

Так что было бы целесообразно сделать вэта ситуация?

1 Ответ

0 голосов
/ 30 июня 2018

Невозможно отобразить PagedList в модель презентации, поскольку PagedListAdapter требуется PagedList для загрузки следующих / предыдущих страниц.

PagedList имеет две основные функции, во-первых, это структура данных для хранения List элементов, которые разбиваются на страницы (часть присутствует и часть отсутствует), используя snapshot(), вы можете легкополучите существующие элементы, сопоставьте модель домена с презентацией и передайте ее ListAdapter , чтобы отобразить список элементов.

Во-вторых, он должен предупредить DataSource, когда требуется больше страниц.PagedListAdapter получает PagedList, и при связывании предметов это зависит от loadAround() метода PagedList для определения необходимости новых страниц.

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Это только мое мнение и открыток обсуждению , но PagingLibrary не является чистым решением по умолчанию, самый простой способ - сопоставить модель domain внутри DataStore при извлечении их (по сети или в дБ) и передать PagedListс презентацией моделей на уровне презентации.Отображение самого PagedList нелогично (хотя и возможно), поскольку оно тесно связано с PagedListAdapter в View.

...