Oop 复合DTO中的DTO应该通过主键或对象引用相互引用吗?
有一项建议是:。相反,它们应该使用其他传输对象的主键作为外键字段 以订单和客户为实体的简单示例 显然,包含没有客户详细信息的订单列表的OrderListDTO将包含订购客户详细信息的外键 复合DTO OrderWithCustomerTo将具有对OrderDTO和CustomerTo的对象引用。但是在这种情况下,嵌入的OrderDTO本身是否应该有一个对其CustomerDTO的对象引用?还是应该使用订购客户的主键 对象引用的指示 一个优点是客户端可以直接使用传输对象,例如,作为表示模型。对于总是完全自包含的传输对象,我倾向于接受这种方法,例如带有相关DTO的复合DTO或完整树。客户可以依靠自我约束。客户端根本不需要对传输对象进行后期处理 主键指示为外键 优点是内部引用和外部引用的处理方式相同。对于可能包含外部引用的传输对象,我倾向于使用这种方法,例如带有外部子ID的子树。客户端必须遍历完整列表以解析外部子ID 更复杂的树或子树示例 现在讨论的传输对象是树或子树。从技术上讲,它是一个节点列表 如果传输对象中的节点通过对象引用(如下面的NodeTOWithObjectReferences)相互引用,是否可以Oop 复合DTO中的DTO应该通过主键或对象引用相互引用吗?,oop,design-patterns,architecture,dto,data-transfer-objects,Oop,Design Patterns,Architecture,Dto,Data Transfer Objects,有一项建议是:。相反,它们应该使用其他传输对象的主键作为外键字段 以订单和客户为实体的简单示例 显然,包含没有客户详细信息的订单列表的OrderListDTO将包含订购客户详细信息的外键 复合DTO OrderWithCustomerTo将具有对OrderDTO和CustomerTo的对象引用。但是在这种情况下,嵌入的OrderDTO本身是否应该有一个对其CustomerDTO的对象引用?还是应该使用订购客户的主键 对象引用的指示 一个优点是客户端可以直接使用传输对象,例如,作为表示模型。对于总
public class NodeTOWithObjectReferences implements Serializable {
private long id;
private NodeTOWithObjectReferences parent;
private List<NodeTOWithObjectReferences> children;
}
公共类NodeTOWithObjectReferences实现可序列化{
私人长id;
private NodeTOWithObjectReferences父节点;
私人名单儿童;
}
或者传输对象必须用外键字段替换每个对象引用,如下面的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;
}
public类nodestowithforeignkey实现可序列化{
私人名单儿童;
}
公共类NodeDetail实现可序列化{
私人长id;
私人长父ID;
私人名单儿童;
}
(我选择transfer对象来封装来自客户端的域模型,并提供特定于客户端的数据视图。) 作为一般性建议,转让 对象不应包含对象 对其他对象的引用。相反 他们应该使用 将其他对象作为外键 田地 你能附上一个链接到这个建议的来源吗?这至少对我来说并不明显 在我当前的项目中,我使用包含对象引用的传递对象。这种方法很方便,而且我还没有遇到任何问题。其中说:“传输对象决不能包含或引用复合传输对象;相反,只要可能,传输对象应该使用主键引用其他传输对象。”我觉得我的例子的反常之处在于树的自我参照。复合对象具有对其建筑对象的对象引用。一个只包含订单的列表具有客户的外键。但是,如何让一份清单与订购客户一起订购?