簡體   English   中英

域模型到DTO映射的周期

[英]Cycles in mapping Domain models to DTOs

您能否告訴我,對於具有周期的對象,將dto映射到域並返回的最佳實踐是什么? 例如,我有以下兩個對象:用戶對象:

public class User {
   private int id;
   private String firstname;
   private String lastname;
   private List<Order> orders;
   // ... some other properties and getters and setters
}

和Order對象:

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(...)函數有問題。 你能告訴我什么是最佳實踐嗎? 當我開始逐步映射User的屬性時,我以實際映射的Orders結束,並創建周期。 感謝您的回答。

首先,我假設您也需要客戶端上的關系。 否則,無論如何您都不會遇到周期問題。 此外,我假設您同時具有UserDTO和OrderDTO,其中OrderDTO具有UserDTO作為成員(並且UserDTO是OrderDTO的列表)。

恕我直言,您只需設置

orderDTO.setUser(dto); // where dto is the UserDTO created initially. 

現在,您將獲得一個周期,在將DTO發送到客戶端時(例如,使用Rest),需要處理該周期。 在JPA方面,您可能具有@OneToOne(按順序)和@OneToMany(按用戶)注釋。

我建議傑克遜進行JSON處理。 如果這樣做,您可以使用

// in UserDTO
@JsonManagedReference
private List<Orders> orders;

// in OrdersDTO
@JsonBackReference
private UserDTO owner; 

我希望這有幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM