复合DTO中的DTO是应该通过主键还是通过对象引用相互引用?

建议传输对象不应包含对其他传输对象的对象引用。相反,他们应该使用其他传输对象的主键作为外键字段。 Order和Customer作为实体的简单示例 显然,包含没有客户详细信息的订单列表的OrderListDTO将包含订购客户详细信息的外键。 复合DTO OrderWithCustomerDTO将具有对OrderDTO和CustomerDTO的对象引用。但是,在这种情况下,嵌入式OrderDTO本身是否有对其CustomerDTO的对象引用?或者它应该使用订购客户的主键? 对象引用的指示 一个优点是客户端可以直接使用传输对象,例如,作为演示模型。我倾向于接受这种方法来处理总是完全自包含的传输对象,例如:具有相关DTO或完整树的复合DTO。客户可以依赖自我控制。客户端根本不需要对传输对象进行后处理。 指示主键作为外键 优点是内部和外部引用以相同的方式处理。我倾向于要求这种方法用于可能包含外部引用的传输对象,例如带有外部childIds的子树。客户端必须遍历完整列表以解析外部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;
}
(我选择了传输对象来封装来自客户端的域模型,并提供客户端特定的数据视图。)     
已邀请:
  作为一般建议,转移   对象不应包含对象   对其他对象的引用。代替,   他们应该使用主键   其他对象作为外键   领域。 你能附上这个推荐来源的链接吗?这至少对我来说并不明显。 在我当前的项目中,我使用包含对象引用的传输对象。这很方便,我还没有遇到过这种方法的任何问题。     

要回复问题请先登录注册