android - Android Clean Architecture:当模型引用两个房间表时缓存映射
问题描述
我有一个将两个表连接在一起的查询。我在 kotlin 中创建了一个数据类,其中包含查询返回的每个表中的 val。当我在 DAO 查询中更新模型时,我显然必须通过干净拱门的层来更新模型类。我得到了将实体映射到域层的 Mapper 类。在这里我遇到了一个问题,因为该函数只能扩展到一个房间实体,而我的数据类引用了两个表中的值。
界面
interface EntityMapper <Entity, DomainModel>{
fun mapFromEntity(entity: Entity): DomainModel
fun mapToEntity(domainModel: DomainModel): Entity
}
班级
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
}
因此,此函数缺少表 B 中的所有值,因为我无法在映射器函数中扩展这两个表。人们如何解决这个问题,因为它可能在干净的架构中运行联合查询,否则在任何不简单的应用程序中都是毫无意义的。
解决方案
你没有提供足够的代码,但我猜你的映射器看起来像这样:
interface Mapper<F, S> {
fun firstToSecond(first: F): S
fun secondToFirst(second: S): F
}
然后,如果您需要将一个类映射到两个单独的类,则需要使用Pair
.
class MyMapper<CustomModel, Pair<TableA, TableB> {
override fun mapToEntity(domainModel: CustomModel): Pair<TableA, TableB>{
...
}
推荐阅读
- javascript - 如何在 node.js 中创建一个登录页面,该页面指向需要在客户端使用 p5.js 运行的网页?
- java - Appium问题。如果“listen eaddrinuse: address already in use”,如何停止呢?为什么它没有停止?
- c# - 使用 mailkit 检索电子邮件链,仅返回对话的第一封电子邮件
- postgresql - 如何使用shell脚本逐行读取postgres db的表数据
- javascript - window.open() 显示相同的 .html
- javascript - 根据另一个脚本运行基于不同工作表的工作表名称的脚本
- javascript - 反应打字稿,对象错误的结构化数组
- azure - 尝试使用 powerShell 将我的应用程序洞察数据采样限制级别更改为 12.5%
- python - 如何在heroku中访问数据库
- c++ - bst 分段故障搜索