我正在尝试使用Android Architecture Component中的分页库,但我对将其集成到基于干净架构的项目中有疑虑。
一般来说,我有3个模块:
- 主模块(应用程序)
- 数据模块(具有网络和数据库依赖项的Android模块)
- 域模块(纯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
,据我所知,分页列表不支持映射。
那么在这种情况下应该怎么做呢?