Jetpack Paging 3 внутри модуля java/kotlin

Я разрабатываю приложение с принципами чистой архитектуры. У меня есть модуль domain, который является модулем Java/Kotlin и не имеет зависимостей от Android, и модуль domainImpl, который является модулем Android и имеет зависимости от модуля local, remote и domain. это пример Repository внутри модуля domain:

interface MovieRepository {
    fun getMovie(id: Long): Flow<Movie>
}

а ниже код - это реализация внутри модуля domainImpl:

class MovieRepositoryImpl(
    private val movieApi: MovieApi
) : MovieRepository {

    override fun getMovie(id: Long): Flow<Movie> = flow {
        emit(movieApi.getMovie(id))
    }

}

В этом случае все работает нормально. Но теперь я пытаюсь добавить Android Paging 3 для разбиения на страницы. Поэтому я должен добавить метод к интерфейсу MovieRepository, например:

fun getMovies(): Flow<PagingData<Movie>>

Но перед этим я должен добавить библиотеку пейджинга в свой модуль domain, но, к сожалению, это библиотека Android, и я не смог найти для нее основную зависимость. Итак, что я могу с этим поделать? Должен ли я из-за этого менять свой модуль domain на модуль Android? Или есть другой обходной путь?


person Saman Sattari    schedule 18.02.2021    source источник


Ответы (1)


Компоненты пейджинга, отличные от Android, находятся в androidx.paging:paging-common — любые зависимости от API-интерфейсов презентаторов специфичны для Android по определению, поэтому любой код, связанный с RecyclerView, LazyColumn и т. д., должен быть специфичным для Android.

Однако PagingSource, PagingData, Pager, RemoteMediator предоставляются paging-common, поэтому ваша реализация этих классов, включая цепочку преобразования и общий вывод Flow<PagingData>, может быть полностью свободной от Android.

person dlam    schedule 19.02.2021