在SOA中,如果一些DTO类具有一些重复的字段。使用Composition或Inheritance是否更好,所以没有重复或只使用一个封装所有字段的DTO类。随着我的DTO类的增长,我看到很多重复的字段名称和Sonar报告是哭泣的家禽。什么是最好的方法(或替代方案)。
e.g。
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;
}
答案 0 :(得分:10)
“一个DTO类”的方法几乎肯定是坏的。它闻起来像神级。许多权威人士完全谴责DTO。你可以从一些基类继承,但对于值对象,它并不是真的合理。组成相同。它使您的代码更复杂。在调试“DocReview”流程时,您必须查看两个,三个或更多DTO类,以便使用这两种方法来理解它。 Bleagh!此外,每个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”)作为后缀并不是很好的命名,真的。