[英]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.