【发布时间】:2017-11-19 14:19:38
【问题描述】:
你能告诉我将 dto 映射到域并返回到具有循环的那个对象的最佳实践是什么?例如我有这两个对象: 用户对象:
public class User {
private int id;
private String firstname;
private String lastname;
private List<Order> orders;
// ... some other properties and getters and setters
}
和订单对象:
public class Order {
private int id;
private User owner;
}
我应该如何将这些域模型映射到 DTO?这是我的映射函数的示例:
public UserDTO userToDto(User user) {
UserDTO dto = new UserDTO();
dto.setIs(user.getId());
dto.setFirstname(user.getFirsname());
dto.setLastname(user.getLastname());
List<OrderDTO> ordersDto = new List<OrderDTO>();
for (Order order : user.getOrders()) {
OrderDTO orderDto = new OrderDTO();
orderDto.setId(order.getId());
orderDto.setUser(...) // what I should I set here?
ordersDto.add(orderDto);
}
dto.setOrders(ordersDto);
return dto;
}
orderDto.setUser(...) 函数有问题。你能告诉我什么是最佳实践吗?当我开始逐步映射用户的属性时,我以映射订单结束,我实际映射并创建循环。感谢您的回答。
【问题讨论】:
-
我假设您会将这些 DTO 序列化为 JSON 或 XML。如果他们有周期会发生什么?你推断出什么?
-
我还没有创建服务。我只是将任务落实到我的学校项目中,我正在考虑实施。当我开始在 userToDto 函数中实现用户属性时,这些属性之一是订单列表,所以接下来我开始映射订单的属性,用户再次在哪里等等......它循环。我的问题是如何避免这种情况以及最佳做法是什么。我希望解释得更清楚。
-
@davidxxx 我不能使用你的代码,因为 OrderDTO 引用了 UserDTO 而不是 User。我需要将 User 属性映射到 UserDTO 属性。
-
我想让你在这里思考。 DTO 不应该根据实体是什么来设计的。它应该根据您希望客户收到的内容进行设计。如果他们有周期会发生什么?你的结论是什么?
-
@JBNizet 所以如果我开始将 User 映射到 UserDTO 它将是无限的过程,对吗?我以前从未实施过这些,所以也许我的想法是错误的,你能给我举个例子我该怎么做吗?我在学校的任务没有明确定义。我只知道我应该将实体映射到 dto。所以我尝试将其 1:1 映射。
标签: java persistence dto