【问题标题】:Clean Architecture and Paging 3.0 with RoomClean Architecture 和 Paging 3.0 with Room
【发布时间】:2020-10-28 12:43:16
【问题描述】:

我正在将分页更新到 3.0 版,并且因为我使用的是干净的架构(这里重要的是我拥有我的存储库和我的用例的核心与所有 android 框架类的应用程序模块之间的分离..)但是我我正在使用两个模型类(例如,一个用于从房间查询数据:

 data class ExampleEntity(
    
        @Expose
        @ColumnInfo(name = INTERVENTION_ID_COLUMN_NAME)
        @SerializedName(INTERVENTION_ID_COLUMN_NAME)
        val interventionId: String?,
    
        @Expose
        @ColumnInfo(name = SITE_NAME_COLUMN_NAME)
        @SerializedName(SITE_NAME_COLUMN_NAME)
        val siteName: String?
    }

另一个是在核心模块和 useCase 中使用,而不会将房间数据库作为依赖项...例如:

data class Example(

        @Expose
        @SerializedName(INTERVENTION_ID_COLUMN_NAME)
        val interventionId: String?,

        @Expose
        @SerializedName(SITE_NAME_COLUMN_NAME)
        val siteName: String?
    }

稍后在databseImplementation中,我将Entity类映射到核心类,并且可以在分页2中映射pagedlist,现在我似乎无法访问Entity的PagingData对象,只能添加到它(标题,分隔符...等)我该如何克服这个设计难题?

【问题讨论】:

    标签: android kotlin android-room clean-architecture android-paging


    【解决方案1】:

    从以下documentation 中可以看出,可以在 PagingData 中的项目到达您的 ViewModel 之前对其进行转换。

    在您的存储库中,您应该有类似的内容

    val flow = Pager(PagingConfig(pageSize = 20)) {
      ExamplePagingSource(backend, query)
    }.flow
    

    想法是像这样映射flow的内容

    flow.mapLatest { pagingData ->
            pagingData.map { entity -> 
                // map to from ExampleEntity to Entity here
            }
        }
    

    【讨论】:

    猜你喜欢
    • 2023-01-18
    • 1970-01-01
    • 2018-01-03
    • 1970-01-01
    • 2022-12-27
    • 2020-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多