【发布时间】:2015-04-08 21:38:30
【问题描述】:
为什么我们应该将域 (DTO) 与具有相同内容的实体类分开? 我知道我们为 UI 使用 DTO,为 Hibernate 使用实体,但我们可以在 DTO 本身中实现注解吗?
【问题讨论】:
为什么我们应该将域 (DTO) 与具有相同内容的实体类分开? 我知道我们为 UI 使用 DTO,为 Hibernate 使用实体,但我们可以在 DTO 本身中实现注解吗?
【问题讨论】:
您实际上不必为它创建 DTO。我的建议是在您必须更改实体以以不同于客户预期的方式显示它们时引入 DTO。
http://www.adam-bien.com/roller/abien/entry/how_evil_are_actually_data
【讨论】:
实施 DTO 并不一定很痛苦。查看Blaze-Persistence Entity Views 了解这样做的原因以及如何避免大部分痛苦。简而言之,使用 DTO 最常见的原因是
【讨论】:
如果您直接使用实体,您可能会遇到各种问题,您可以通过引入单独的层来解决这些问题(尽管我不会将它们命名为 DTO):
对 UI、Domain Logik 和 Database 的要求可能(并且在每个非平凡项目中)会有所不同:也许您希望将内容存储在 Blob 中,但希望将其作为域中的对象结构。也许您需要 UI 的“isChanged”字段,您不需要将其存储在数据库中,因为它总是会为 false 等等。
至少当您的实体附加到会话时,每个更改都安排在数据库中持久化,如果这是您想要的,这可能很好,但当您只想要时它也可能相当烦人存储部分更改。
说:它添加了额外的代码,如果你没有这些或类似的问题,那么没有 DTO 本质上没有错。
【讨论】: