Mar*_*cci 17 android clean-architecture android-architecture-components android-jetpack android-paging
我正在尝试Android架构组件中的分页库,但我怀疑将它集成到基于干净架构的项目中.
一般来说我有3个模块:
为了引入分页,我不得不将PagedList<T>类视为域类.(IMO不是一个可怕的想法,因为最终是一个列表,数据源是抽象的)
所以在域层我可以有一个像以下的repostiory:
interface ItemRepository {
fun getItems():PagedList<Item>
}
Run Code Online (Sandbox Code Playgroud)
然后在数据模块中创建如下的实现:
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()
}
Run Code Online (Sandbox Code Playgroud)
到现在为止还挺好.我的疑问是,当我们需要变换域模型为表示层(比方说我的项目需要意识到,如果被检查显示的图标检查),通常我会我的域模型映射到演示文稿一个.
我知道DataSourceFactoryhas map和mapByPage方法,但工厂驻留在数据层.我的Viewmodel使用来自模型层的数据,在这种情况下,这将是一个数据PagedList,据我所知,分页列表不支持映射.
那么在这种情况下适当的做法是什么呢?
您无法映射PagedList到演示模型,因为PagedListAdapter需要PagedList加载下一页/上一页。
PagedList 有两个主要功能,首先它是一个数据结构,用于保存List分页的项目(部分存在和部分不存在),使用snapshot()您可以轻松获取当前项目,将域模型映射到演示项目并将其传递给ListAdapter显示项目列表。
DataSource其次,它必须在需要更多页面时发出警报。PagedListAdapter接收一个PagedList,并且在绑定项目时,它依赖于检测何时需要新页面loadAround()的方法。PagedList
免责声明:这只是我的观点,可供讨论,
但PagingLibrary默认情况下并不是一个干净的解决方案,最简单的方法是在获取域模型DataStore(网络或数据库)时将域模型映射到内部,并将表示PagedList模型与表示模型一起传递到表示层。映射 PagedList 本身并不符合逻辑(尽管可能),因为它与.PagedListAdapterView
| 归档时间: |
|
| 查看次数: |
1204 次 |
| 最近记录: |