Die "one DTO Klasse" Ansatz ist fast sicher schlecht. Es riecht nach einer Gottklasse. Viele Experten kritisieren DTOs insgesamt. Sie könnten von einer Basisklasse erben, aber für Wertobjekte ist es nicht wirklich sinnvoll. Gleiches für die Zusammensetzung. Es macht Ihren Code komplizierter. Beim Debuggen des "DocReview" -Flusses müssten Sie sich zwei, drei oder mehr DTO-Klassen ansehen, um sie mit beiden Ansätzen zu verstehen. Bleagh! Außerdem befindet sich jeder DTO typischerweise in einer separaten semantischen Domäne: "Doc" ist nicht "DocReview". Die scheinbaren "gemeinsamen" Elemente sind also überhaupt nicht üblich. Sie teilen nur einen Implementierungstyp; ihre Bedeutungen sind sehr unterschiedlich.
Wenn der Elementtyp inhärent zusammengesetzt ist, z. B. wenn viele Domänen das Konzept einer Identifier
teilen, könnten Sie einen Typ für die Zusammensetzung in die DTOs für diese Domänen machen. In Ihrem Beispiel könnten Sie
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;
}
Der Schlüssel hier ist, dass Identifier
in beiden Domänen semantisch äquivalent ist, so macht es Sinn, es als eine gemeinsame Art zu haben. Sonst würdest du das nicht tun.
Sidebar: "Dto" (oder "DTO") als Suffix ist nicht gut Benennung, wirklich.
Wenn ein DTO eine "ist a" -Beziehung zu einem anderen DTO hat, sollte dann Vererbung verwendet werden? Wenn ein DTO eine "hat eine" Beziehung zu einem anderen hat, sollte es Zusammensetzung verwenden? Das sind die wirklichen Fragen, die Sie stellen möchten. Vererbung oder Zusammensetzung sind keine Selbstzweck. – scottb