JPA和DTO,创建DTO的最佳方式是什么?

3
我们将使用DTO来在演示层与后端之间传递数据。
我有一个服务对象上的方法叫做PostAd,它可以发布用户输入的广告。这个Ad对象与另一个叫做AdValues的对象相关联,它包含了Ad的各种值(如标题、价格、描述等)。
@Entity
public class Ad {
   @OneToMany
   Set<AdValue> values ...
   ...

我想了解一下在DTO架构方面哪种方案更好:
  1. have two DTO's one called AdDTO and the other called AdValuesDTO and call the PostAd method as PostAd(AdDTO, AdValuesDTO) ~or~

  2. Have an AdDTO that contains the AdValuesDTO mimicking the entity structure... this involves having DTO's within DTO's:

    AdDTO {
      Set<AdValuesDTO> adValues ...
    

那么PostAd方法被称为PostAd(AdDTO)

还有其他的替代方案吗?

1个回答

9

两种方法都可以,但是使用后一种方法,您还可以使用DTO将数据从服务器发送到客户端。由于拥有DTO已经很难且成本很高,因此您真的不希望像耶稣和面包一样增加它们。

因此,根据我的经验,当您使用DTO时,实际上会在实体的对称结构中拥有一个平行结构,您可以在客户端和服务器之间双向使用它们。这使得使用映射解决方案(如Dozer)成为可能,或者至少更容易(任何使使用DTO less 痛苦的东西都受欢迎)。


2
谢谢,我采纳了你的建议,在我的POM中添加了Dozer,并成功删除了75%的样板代码。 - Billworth Vandory
一个提示:远离Dozer。它要求您打破封装,当某些东西失败时,它是在运行时而不是编译时。它目前基于xml(=xml地狱)。最后但并非最不重要的是:Dozer非常慢... - user2054927

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