繁体   English   中英

DTO 应该使用继承还是组合

[英]Should DTOs use inheritance or composition

在 SOA 中,如果几个 DTO 类有一些重复的字段。 使用组合或继承是不是更好,所以没有重复,或者只使用一个封装所有字段的 DTO 类。随着我的 DTO 类的增长,我看到很多重复的字段名称和声纳报告正在哭泣。 什么是最好的方法(或替代方法)。

例如

public class DocDto{
    private Long id;
    private String name;
    private String docType
}

public class DocReviewDto{
    private Long id;
    private String name;
    private String status;
    private String comment;
}

“一个 DTO 类”的方法几乎肯定是不好的。 它闻起来像神级。 许多专家完全谴责 DTO。 您可以从某个基类继承,但对于值对象来说,这并不明智。 作曲也一样。 它使您的代码更加复杂。 在调试“DocReview”流程时,您必须查看两个、三个或更多 DTO 类才能通过任一方法理解它。 死! 此外,每个 DTO 通常都在一个单独的语义域中:“Doc”不是“DocReview”。 因此,表面上的“常见”元素实际上根本不常见。 他们只是共享一个实现类型; 它们的含义完全不同。

当成员类型本质上是复合的时,例如,如果许多域共享Identifier的概念,您可以将其作为组合到这些域的 DTO 中的类型。 在你的例子中,你可能有

public class Identifier {
  long id; // should be a 'String', actually
  String name;
}

public class Doc {
  private Identifier identifier;
  private String docType
}

public class DocReview {
  private Identifier identifier;
  private String status;
  private String comment;
}

这里的关键是Identifier在两个域中在语义上是等效的,因此将其作为通用类型是有意义的。 否则你不会那样做。

边栏:“Dto”(或“DTO”)作为后缀并不是一个好的命名,真的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM