java/kotlin 模块内的 Jetpack Paging 3
Jetpack Paging 3 inside java/kotlin module
我正在开发一个具有简洁架构原则的应用程序。我有一个 domain
模块,它是一个 Java/Kotlin
模块,它没有 android 依赖项,还有一个 domainImpl
模块,它是一个 Android
模块,并且有依赖项到 local
、remote
和 domain
模块。这是 domain
模块中的 Repository
示例:
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>>
但在此之前,我必须将 Paging 库添加到我的 domain
模块,但不幸的是它是一个 Android
库,我找不到它的核心依赖项。那么我能做些什么呢?因此,我是否必须将我的 domain
模块更改为 android 模块?或者还有其他解决方法吗?
Paging 的非 android 组件在 androidx.paging:paging-common
中 - 对演示者 API 的任何依赖项都是 Android 根据定义特定的,因此与 RecyclerView
、LazyColumn
,等等需要 Android 具体。
然而 PagingSource
、PagingData
、Pager
、RemoteMediator
都是由 paging-common
提供的,所以你实现那些 类,包括你的转换链和 Flow<PagingData>
的整体输出可以完全 android 免费。
我正在开发一个具有简洁架构原则的应用程序。我有一个 domain
模块,它是一个 Java/Kotlin
模块,它没有 android 依赖项,还有一个 domainImpl
模块,它是一个 Android
模块,并且有依赖项到 local
、remote
和 domain
模块。这是 domain
模块中的 Repository
示例:
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>>
但在此之前,我必须将 Paging 库添加到我的 domain
模块,但不幸的是它是一个 Android
库,我找不到它的核心依赖项。那么我能做些什么呢?因此,我是否必须将我的 domain
模块更改为 android 模块?或者还有其他解决方法吗?
Paging 的非 android 组件在 androidx.paging:paging-common
中 - 对演示者 API 的任何依赖项都是 Android 根据定义特定的,因此与 RecyclerView
、LazyColumn
,等等需要 Android 具体。
然而 PagingSource
、PagingData
、Pager
、RemoteMediator
都是由 paging-common
提供的,所以你实现那些 类,包括你的转换链和 Flow<PagingData>
的整体输出可以完全 android 免费。