【发布时间】:2021-06-09 14:49:09
【问题描述】:
我正在使用存储库模式开发 MVVM kotlin 应用程序
我已将我的模型类分开如下
- classes 代表来自网络的数据
- 类代表房间数据库的实体
- 代表领域的类
在我的存储库中,我希望始终返回域对象,而不是网络对象或实体对象。
在我的 Dao 中,我插入和检索实体对象,如下所示
@Insert(onConflict = OnConflictStrategy.REPLACE)
suspend fun insertAsteroids(asteroid: List<AsteroidEntity>)
@Query("SELECT * FROM asteroid_tbl")
fun getAsteroidsFromDb () : LiveData<List<AsteroidEntity>>
我在存储库中有一个函数,可以将小行星列表作为实时数据从房间返回,如下所示
override suspend fun getAsteroids(): LiveData<List<Asteroid>> {
return appLocalDb.asteroidDao.getAsteroidsFromDb()
}
但问题是 dao 返回一个 LiveData<List<AsteroidEntity>>
而存储库我希望它返回域模型
LiveData<List<Asteroid>>
关于如何解决这个问题有什么建议吗?
【问题讨论】:
-
你应该使用mapping一个DAO的方法来处理一个模型对象。
-
我确实有一个将实体映射到域模型的映射器。但在我的情况下,我有一个域对象列表的实时数据。映射器只是将实体对象转换为域对象或将实体对象列表转换为域对象列表。
标签: android kotlin mvvm repository dao