Clean Architecture 和 Paging 3.0 with Room
Clean Architecture and Paging 3.0 with Room
我正在将分页更新到 3.0 版,因为我使用的是干净的架构(这里重要的是我拥有我的回购和我的 useCases 的核心与所有 android 框架所在的应用程序模块之间的分离classes ..) 但是我使用了两个模型 classes(一个用于从房间查询数据,例如:
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?
}
另一个将在核心模块和用例中使用,完全不暗示房间数据库是依赖项...例如:
data class Example(
@Expose
@SerializedName(INTERVENTION_ID_COLUMN_NAME)
val interventionId: String?,
@Expose
@SerializedName(SITE_NAME_COLUMN_NAME)
val siteName: String?
}
稍后在 databseImplementation 中,我将实体 class 映射到核心 Class 并且可以在分页 2 中映射分页列表,现在我似乎无法访问 PagingData object 的实体,只能添加到它(headers,分隔符...等)我如何克服这个设计难题?
正如您从以下内容中看到的那样 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
}
}
我正在将分页更新到 3.0 版,因为我使用的是干净的架构(这里重要的是我拥有我的回购和我的 useCases 的核心与所有 android 框架所在的应用程序模块之间的分离classes ..) 但是我使用了两个模型 classes(一个用于从房间查询数据,例如:
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?
}
另一个将在核心模块和用例中使用,完全不暗示房间数据库是依赖项...例如:
data class Example(
@Expose
@SerializedName(INTERVENTION_ID_COLUMN_NAME)
val interventionId: String?,
@Expose
@SerializedName(SITE_NAME_COLUMN_NAME)
val siteName: String?
}
稍后在 databseImplementation 中,我将实体 class 映射到核心 Class 并且可以在分页 2 中映射分页列表,现在我似乎无法访问 PagingData object 的实体,只能添加到它(headers,分隔符...等)我如何克服这个设计难题?
正如您从以下内容中看到的那样 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
}
}