复合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;
}
(我选择了传输对象来封装来自客户端的域模型,并提供客户端特定的数据视图。)
没有找到相关结果
已邀请:
1 个回复
链眷克袒姜