【发布时间】:2017-06-15 16:06:38
【问题描述】:
我想在微服务的上下文中重新提出这个问题。这是原始问题的引述。
我目前正在为一个项目创建一个 REST-API 并且一直在阅读 关于最佳实践的文章。许多人似乎反对 DTO 只是公开域模型,而其他人似乎 认为 DTO(或用户模型或任何你想叫它的东西)不好 实践。个人觉得这篇文章很有道理。
不过,我也理解 DTO 的缺点 映射代码,域模型可能 100% 相同 DTO-counterpart 等等。
现在,我的问题
我更倾向于在我的应用程序的所有层中使用一个对象(换句话说,只公开域对象而不是创建 DTO 并手动复制每个字段)。我的 Rest 合同与域对象的差异可以使用 Jackson 注释来解决,例如 @JsonIgnore 或 @JsonProperty(access = Access.WRITE_ONLY) 或 @JsonView 等)。或者,如果有一个或两个字段需要使用 Jackson Annotation 无法完成的转换,那么我将编写自定义逻辑来处理这个问题(相信我,在我的 5 年多的时间里,我什至没有遇到过这种情况休息服务的长途旅行)
我想知道我是否错过了没有将域复制到 DTO 的任何真正的不良影响
【问题讨论】:
-
与链接的问题一样,这完全是基于意见的(尽管它确实是一个非常好的问题)
-
@FedericoPeraltaSchaffner 感谢 cmets。我正在寻找更多数据点/事实,而不是意见 :) 如果我无法从 Stackoverflow 平台得到这个问题的答案,我可能无法从其他任何地方得到它。恕我直言,Stackoverflow 应该重新考虑应该将什么归类为意见。同时我明白,如果我问“Gradle Vs Maven,我应该选择哪一个”,这是一个寻求意见的问题。
-
是的,我同意你的观点,问题是这条线很难划清……
-
太累了,很多问题都被关闭了,因为它们是基于意见的。我喜欢意见,而且它们对我来说往往比事实更有价值(我可以在目标库/框架/等的源代码/文档中轻松找到)。这家伙只是需要帮助..
-
就个人而言,我会投票支持 Danylo Zatorsky 的回答。 DTO 是真正的客户驱动和合同设计。在某些微服务模式中,例如聚合,DTO 将在不同的微服务中发挥重要作用。
标签: java spring web-services spring-mvc spring-boot