具有整洁架构的 Android 分页库

标签 android android-architecture-components clean-architecture android-jetpack android-paging

我正在尝试来自 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()
}

到目前为止一切顺利。我的疑问是当我们需要转换表示层的域模型时(假设我的项目需要知道是否被选中以显示选中的图标)通常我会将我的域模型映射到表示层。

我知道 DataSourceFactorymapmapByPage方法,但工厂位于数据层。我的 Viewmodel 使用来自模型层的数据,在这种情况下将是 PagedList ,据我所知,分页列表不支持映射。

那么在这种情况下应该怎么做呢?

最佳答案

您不能将 PagedList 映射到表示模型中,因为 PagedListAdapter 需要 PagedList 来加载下一页/上一页。

PagedList 有两个主要功能,首先它是一个数据结构,用于保存分页项目的List(部分存在和部分不存在),使用 snapshot() 你可以轻松获取当前项目,将域模型映射到演示文稿并将其传递给 ListAdapter显示项目列表。

其次,它必须在需要更多页面时提醒 DataSourcePagedListAdapter 接收一个 PagedList,并且在绑定(bind)项目时它依赖于 PagedListloadAround() 方法来检测何时有新的需要页面。

免责声明:这只是我的意见,欢迎讨论 但是 PagingLibrary 默认情况下不是一个整洁的解决方案,最简单的方法是在获取它们时将 domain 模型映射到 DataStore 中(网络或数据库)并将带有 presentation 模型的 PagedList 传递给表示层。映射 PagedList 本身是不合逻辑的(尽管可能),因为它与 View 中的 PagedListAdapter 紧密耦合。

关于具有整洁架构的 Android 分页库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50548387/

相关文章:

c++ - C头文件可以被视为接口(interface)吗?

android - 现在有人知道如何注册 Google Backup API key 吗?

android - 插入矢量资源后如何在 drawable.xml 中添加图标?

android - CollapsingToolbarLayout 折叠标题位置不正确

android - 来自 Transformation 的数据绑定(bind) LiveData - Android Kotlin

android - LiveData 和转换使用

android - 房间持久性库。删除所有

android - Android App 更新的 Delta 更新

android - 整洁的架构 Android : where to do object mapping

java - MVP Clean Architecture - 计算和非数据相关任务属于哪里?