転送オブジェクトには、他の転送オブジェクトへのオブジェクト参照を含めないようにすることをお勧めします。代わりに、他の転送オブジェクトの主キーを外部キー フィールドとして使用する必要があります。
Order と Customer をエンティティとして使用する簡単な例
明らかに、顧客の詳細を含まない注文のリストを含む OrderListDTO には、注文する顧客の詳細への外部キーが含まれます。
複合 DTO OrderWithCustomerDTO には、OrderDTO および CustomerDTO へのオブジェクト参照があります。しかし、この場合、埋め込まれた OrderDTO 自体に CustomerDTO へのオブジェクト参照が必要でしょうか? それとも、注文した顧客の主キーを使用する必要がありますか?
オブジェクト参照の表示
利点の 1 つは、クライアントが転送オブジェクトをプレゼンテーション モデルなどとして直接使用できることです。私は、関連する DTO を持つ複合 DTO や完全なツリーなど、常に完全に自己完結型の転送オブジェクトに対してこのアプローチを受け入れる傾向があります。クライアントは自己完結型に依存できます。クライアントは、転送オブジェクトを後処理する必要はまったくありません。
外部キーとしての主キーの表示
利点は、内部参照と外部参照が同じように扱われることです。外部参照を含む可能性のある転送オブジェクト (外部の childId を持つサブツリーなど) には、このアプローチが必要になる傾向があります。クライアントは、完全なリストを繰り返し処理して、外部の childIds を解決する必要があります。
ツリーまたはサブツリーを使用したより複雑な例
問題の転送オブジェクトはツリーまたはサブツリーです。技術的には、これはノードのリストです。
以下の NodeTOWithObjectReferences のようなオブジェクト参照で、転送オブジェクト内のノードが相互に参照しても問題ありませんか?
public class NodeTOWithObjectReferences implements Serializable {
private long id;
private NodeTOWithObjectReferences parent;
private List<NodeTOWithObjectReferences> children;
}
または、転送オブジェクトは、以下の NodesTOWithForeignKeys のような外部キー フィールドですべてのオブジェクト参照を置き換える必要がありますか?
public class NodesTOWithForeignKeys implements Serializable {
private List<NodeDetail> children;
}
public class NodeDetail implements Serializable {
private long id;
private long parentId;
private List<Long> childIds;
}
(クライアントからのドメイン モデルをカプセル化し、クライアント固有のデータ ビューを提供するために、転送オブジェクトを選択しました。)