gpt4 book ai didi

java - DTO应该使用继承还是组合

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:54:57 25 4
gpt4 key购买 nike

在 SOA 中,如果一些 DTO 类具有一些重复的字段。使用组合或继承更好,这样就没有重复,或者只使用一个封装所有字段的 DTO 类。随着我的 DTO 类的增长,我看到很多重复的字段名称,Sonar 报告令人啼笑皆非。什么是最好的方法(或替代方法)。

例如

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

关于java - DTO应该使用继承还是组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37870918/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com