将几个服务器模型映射到一个域中的正确方法是什么?

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>
}

您可以删除 flatMapObservable.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 }!!)
            }
        }