我正在尝试来自Android Architecture Component的分页库,但我怀疑将它集成到一个基于干净架构的项目中。
通常我有3个模块:
- 主模块(应用程序)
- 数据模块(具有网络和数据库依赖项的 Android 模块)
- 域模块(纯 Kotlin 模块)
为了引入分页,我不得不将PagedList<T>
类视为领域类。(IMO 并不是一个糟糕的主意,因为最后是一个列表并且数据源是抽象的)
所以在域层我可以有一个像这样的存储库:
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 使用来自模型层的数据,在这种情况下是 a PagedList
,据我所知,分页列表不支持映射。
那么在这种情况下应该做些什么呢?