我正在开发一个具有清晰架构原则的应用程序。我有一个domain
模块,它是一个Java/Kotlin
模块,它没有安卓依赖,一个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>>
但在此之前,我必须将分页库添加到我的domain
模块,但不幸的是它是Android
库,我找不到它的核心依赖项。那么我能做些什么呢?我必须改变我的domain
模块,因为这个android模块?或者有其他的解决方法吗?
分页的非android组件在androidx.paging:paging-common
中-任何依赖于演示器api的定义都是android特定的,因此任何与RecyclerView
,LazyColumn
等相关的代码都需要针对android。
但是PagingSource
,PagingData
,Pager
,RemoteMediator
都是由paging-common
提供的,所以你对这些类的实现,包括你的转换链和Flow<PagingData>
的整体输出都可以完全不依赖于android。