DTO 是否应使用继承或组合

2022-09-04 02:21:56

在 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;
}

答案 1

“一个DTO类”方法几乎肯定是坏的。它闻起来像神级。许多权威人士完全谴责DTO。你可以从某个基类继承,但对于值对象来说,它并不真正明智。构图也是如此。它使您的代码更加复杂。调试“DocReview”流时,必须查看两个、三个或更多 DTO 类才能使用任一方法理解它。哎呀!此外,每个DTO通常位于一个单独的语义域中:“Doc”不是“DocReview”。因此,表面上的“共同”元素实际上根本不常见。它们只是共享一个实现类型;它们的含义是完全不同的。

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

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”)作为后缀并不是很好的命名,真的。


答案 2

推荐