创建复杂DTO的领域模型映射器

3
我正在使用JSON到Kotlin插件生成DTO类,并使用Moshi来节省处理API复杂JSON响应的时间。
只是为了让你们了解响应有多大。

enter image description here

使用Moshi的示例DTO

@JsonClass(generateAdapter = true)
data class AssetDto(
    @Json(name = "data")
    val `data`: List<AssetData> = listOf(),
    @Json(name = "status")
    val status: Status = Status()
)

@Parcelize
@JsonClass(generateAdapter = true)
data class Status(
    @Json(name = "elapsed")
    val elapsed: Int = 0,
    @Json(name = "timestamp")
    val timestamp: String = ""
) : Parcelable

@Parcelize
@JsonClass(generateAdapter = true)
data class AssetData(
    @Json(name = "id")
    val id: String = "",
    @Json(name = "metrics")
    val metrics: Metrics = Metrics(),
    @Json(name = "name")
    val name: String = "",
    @Json(name = "profile")
    val profile: Profile = Profile(),
    @Json(name = "symbol")
    val symbol: String? = ""
) : Parcelable

问题

  1. 我想知道在不手动编码的情况下,创建复杂DTO类的领域模型的最佳方法是什么。

  2. 我应该为AssetDtoAssetData创建领域模型吗?正如您所看到的,我有大量的值对象,我不知道是否应该为每个值对象创建一个领域模型,或者重用来自DTO的数据类是否可以。

目前,我使用JSON转换为Kotlin生成了另一堆普通数据类,这意味着我有数十个相同的数据类,看起来我仍然必须手动设置每个值,这现在成为了一个完全的阻碍。 我不确定是否应该继续实施映射器。

data class AssetDomain(
    var status: Status? = Status(),
    var `data`: List<Data>? = listOf()
)

data class Status(
    var elapsed: Int? = 0,
    var timestamp: String? = ""
)

data class Data(
    var id: String? = "",
    var metrics: Metrics? = Metrics(),
    var name: String? = "",
    var profile: Profile? = Profile(),
    var symbol: String? = ""
)

enter image description here

1个回答

0
你应该根据业务逻辑创建领域模型,而不是基于响应本身。

同意,但是如果域模型太大,问题仍然存在。你必须手动映射它们。我已经在将其映射到域时尽可能减少了响应数据,但它仍然很大/复杂。 - Bitwise DEVS
我跟你有同样的问题。有人能帮忙吗? - Long Giang
@BitwiseDEVS,你有没有解决方案? - Long Giang
很抱歉,@LongGiang,目前我没有这样的工具。我想手动完成是现在最好的选择,因为您可以完全控制从DTO中包含哪些数据来生成领域模型。 - Bitwise DEVS

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接