将几个服务器模型映射到一个域中的正确方法是什么?
Which is right way to map few server models into one domains?
我的服务器 api 看起来像这样:
data class ArticleDTO(val id: Int, val title: String, val typeId: Int)
data class Type(val id: Int, val name: String)
interface API {
fun getArticles(): Single<List<ArticleDTO>>
fun getTypes(): Single<List<Type>>
}
我有一个模型,我在 UI:
中使用
data class Article(val title: String, val typeName: String)
我创建了地图方法:
fun ArticleDTO.toArticle(type: Type) = Article(this.title, typeName = type.name)
在存储库中 class 我这样做了:
fun getArticles() =
Observables.combineLatest(api.getArticles().toObservable(), api.getTypes().toObservable())
.flatMap {
Observable.just(it.first.map { articleDTO ->
articleDTO
.toArticle(it.second.find { type -> type.id == articleDTO.typeId }!!)
})
}
有没有更好的方法?
如果我的 api 看起来像这样怎么办:
interface API {
fun getArticles(): Single<List<ArticleDTO>>
fun getTypes(typeId: Int): Single<Type>
}
您可以删除 flatMap
和 Observable.just
fun getArticles() = Observables.combineLatest(api.getArticles().toObservable(), api.getTypes().toObservable())
.map { (dtos, types) ->
dtos.map { articleDTO ->
articleDTO
.toArticle(types.find { type -> type.id == articleDTO.typeId }!!)
}
}
我的服务器 api 看起来像这样:
data class ArticleDTO(val id: Int, val title: String, val typeId: Int)
data class Type(val id: Int, val name: String)
interface API {
fun getArticles(): Single<List<ArticleDTO>>
fun getTypes(): Single<List<Type>>
}
我有一个模型,我在 UI:
中使用data class Article(val title: String, val typeName: String)
我创建了地图方法:
fun ArticleDTO.toArticle(type: Type) = Article(this.title, typeName = type.name)
在存储库中 class 我这样做了:
fun getArticles() =
Observables.combineLatest(api.getArticles().toObservable(), api.getTypes().toObservable())
.flatMap {
Observable.just(it.first.map { articleDTO ->
articleDTO
.toArticle(it.second.find { type -> type.id == articleDTO.typeId }!!)
})
}
有没有更好的方法?
如果我的 api 看起来像这样怎么办:
interface API {
fun getArticles(): Single<List<ArticleDTO>>
fun getTypes(typeId: Int): Single<Type>
}
您可以删除 flatMap
和 Observable.just
fun getArticles() = Observables.combineLatest(api.getArticles().toObservable(), api.getTypes().toObservable())
.map { (dtos, types) ->
dtos.map { articleDTO ->
articleDTO
.toArticle(types.find { type -> type.id == articleDTO.typeId }!!)
}
}