Я пробовал библиотеку подкачки из Компонента архитектуры 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
, и, насколько я знаю, постраничный список не поддерживает сопоставление.
Так что было бы целесообразно сделать вэта ситуация?