「1つのDTOクラス」アプローチはほぼ確実に悪いです。それは神のように匂いがする。多くの専門家がDTOを全面的に搾取している。いくつかの基底クラスから継承することができますが、値オブジェクトの場合、それは実際には分かりません。コンポジションと同じです。コードが複雑になります。 "DocReview"フローをデバッグするときは、2つ、3つ、またはそれ以上の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")は実際には良い名前ではありません。
DTOと別のDTOとの関係が "is a"の場合、継承を使用する必要がありますか? DTOが別のものと「関係がある」関係を持っている場合、それは構成を使用すべきですか?これらはあなたが求めている本当の質問です。継承や構成は、それ自体が終わりではありません。 – scottb