Android 清洁架构:当模型引用两个房间表时缓存映射

Android Clean Architecture : Cache Mapping When Model refers to two room tables

我有一个将两个 table 连接在一起的查询。我在 kotlin 中创建了一个数据 class,其中包含查询返回的每个 table 的值。当我在 DAO 查询中更新模型时,我显然必须通过 clean arch 的层来更新模型 class。我找到了将实体映射到域层的映射器 class。这里我 运行 遇到了一个问题,因为函数只能扩展到一个房间实体,而我的数据class 引用了两个 table 的值。

界面

interface EntityMapper <Entity, DomainModel>{

fun mapFromEntity(entity: Entity): DomainModel
fun mapToEntity(domainModel: DomainModel): Entity
}

Class

 fun entityListToList(entityTableA: List<TableA>): List<Model> {
    val list: ArrayList<Model> = ArrayList()
    for (entity in entityTableA) {
        list.add(mapFromEntity(entity))
    }
    return list
}


fun listToEntityList(entityTableA: List<Model>): List<TableA> {
    val entity: ArrayList<TableA> = ArrayList()
    for (entity in entityTableA) {
        entity.add(mapToEntity(entityTableA))
    }
    return entityTableA
}


override fun mapFromEntity(entityTableA: TableA): Model{
    return Model()
}


 override fun mapToEntity(domainModel: Model): TableA{
    return TableA
}

因此此函数缺少 table B 中的所有值,因为我无法在映射器函数中扩展两个 table。人们如何解决这个问题可能 运行 在干净的架构中加入查询,否则它在任何不简单的应用程序中都是毫无意义的。

你没有提供足够的代码,但我猜你的映射器看起来像这样:

interface Mapper<F, S> {
    fun firstToSecond(first: F): S
    fun secondToFirst(second: S): F
}

然后如果您需要将一个 class 映射到两个单独的 class,您需要使用 Pair.

class MyMapper<CustomModel, Pair<TableA, TableB> {
    override fun mapToEntity(domainModel: CustomModel): Pair<TableA, TableB>{
        ...
}