Я пробовал библиотеку подкачки из Android Architecture Component, но у меня есть сомнения в ее интеграции в проект, основанный на чистой архитектуре.
Обычно у меня есть 3 модуля:
- Основной модуль (приложение)
- Модуль данных (модуль Android с сетевыми и db-зависимостями)
- Модуль домена (модуль Pot Kotlin)
Чтобы ввести разбивку на страницы, мне пришлось рассматривать PagedList<T>
как класс домена. (IMO - не страшная идея, так как в конце есть список, а источник данных абстрагирован)
Таким образом, в доменном слое у меня может быть репозиторий вроде:
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()
}
Все идет нормально. Я сомневаюсь, когда нам нужно преобразовать модель доменов для уровня представления (скажем, мой элемент должен быть осведомлен, если был отмечен, чтобы показать отмеченную иконку), как правило, я бы привязал свою модель домена к презентации.
Im aware DataSourceFactory
имеет методы map
и mapByPage
, но фабрика находится в слое данных. Моя модель Viewmodel потребляет данные с уровня модели, что в этом случае будет PagedList
, и, насколько мне известно, выгруженный список не поддерживает отображение.
Итак, что было бы подходящей задачей в этой ситуации?