Задать вопрос
@arteskin

Как использовать Paging3 при чистой архитектуре?

Есть PagingSource, который в зависимости от параметра query получает разные данные от API.
class MoviePagingSource(
    private val service: MovieService,
    private val query: String
) : PagingSource<Int, Movie>() {

    override suspend fun load(params: LoadParams<Int>): LoadResult<Int, Movie> {

        val page = params.key ?: 1
        val response = service.getMovies(query, page)

        return try {
            val movies = response.result.map { it.toMovie() }
            val prevKey = if (page != 0) page - 1 else null
            val nextKey = if (page < response.total_pages) page + 1 else null
            LoadResult.Page(movies, prevKey, nextKey)
        } catch (e: Exception) {
            LoadResult.Error(e)
        }
    }
}


Затем есть репозиторий, который возвращает PagingData
class MovieRepositoryImpl(
    private val service: MovieService
): MovieRepository {

    override fun getMovies(query: String): Flow<PagingData<Movie>> =
        Pager(
            config = PagingConfig(pageSize = 20),
            pagingSourceFactory = { MoviePagingSource(service, query) }
        ).flow
}


И есть UseCase, который вызывает метод репозитория
class GetMovies(
    private val repository: MovieRepository
) {
    operator fun invoke() = Movies(
        popular = repository.getMovies("popular")
    )
}


Насколько я понимаю, передача параметра query в юзкейсе нарушает чистую архитектуру, так как запросы у разных апи свои, и это не должно делаться в domain слое. Как этого избежать? Вижу вариант создания множества методов в репозитории под каждый query, но вряд-ли это то, что нужно
  • Вопрос задан
  • 190 просмотров
Подписаться 1 Средний Комментировать
Пригласить эксперта
Ответы на вопрос 1
Jacen11
@Jacen11
нарушает чистую архитектуру, так как запросы у разных апи свои
как вообще связаны твои запросы и чистая архитектура?

и это не должно делаться в domain слое
что не должно делаться? передача параметров? что за бред
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы