gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 02:50:56 27 4
gpt4 key购买 nike

有一个建议是transfer objects should not contain object references to other transfer objects .相反,他们应该使用其他传输对象的主键作为外键字段。

将 Order 和 Customer 作为实体的简单示例

显然,包含订单列表但没有客户详细信息的 OrderListDTO 将包含订购客户详细信息的外键。

复合 DTO OrderWithCustomerDTO 将具有对 OrderDTO 和 CustomerDTO 的对象引用。但是在这种情况下,嵌入的 OrderDTO 本身是否应该有一个对其 CustomerDTO 的对象引用?还是应该使用订购客户的主键?

对象引用的指示

一个优点是客户端可以直接使用传输对象,例如作为演示模型。对于始终完全独立的传输对象,我倾向于接受这种方法,例如具有相关 DTO 或完整树的复合 DTO。客户端可以依靠自包含。客户端根本不需要对传输对象进行后处理。

主键作为外键的指示

优点是内部和外部引用的处理方式相同。我倾向于需要这种方法来传输可能包含外部引用的对象,例如带有外部 childId 的子树。客户端必须遍历完整列表以解析外部 childId。

带有树或子树的更复杂示例

现在有问题的传输对象是树或子树。从技术上讲,它是一个节点列表。

如果传输对象中的节点通过像下面的 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;
}

(我选择传输对象来封装来自客户端的域模型并提供客户端特定的数据 View 。)

最佳答案

As a general recommendation, transfer objects should not contain object references to other objects. Instead, they should use the primary keys of the other objects as foreign key fields.



您能否附上此建议来源的链接?至少对我来说并不明显。

在我当前的项目中,我使用包含对象引用的传输对象。这很方便,我还没有遇到这种方法的任何问题。

关于oop - 复合 DTO 中的 DTO 应该通过主键还是通过对象引用相互引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5050171/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com