Nell'architettura della mia applicazione di solito invio l'oggetto o l'elenco di oggetti dal livello di accesso ai dati al livello Web tramite il livello di servizio, in cui questi oggetti vengono trasformati da DAO oggetto a un oggetto DTO e viceversa. Il livello Web non ha accesso agli oggetti DAO e il livello DAO non utilizza DTO.Modello DTO: il modo migliore per copiare le proprietà tra due oggetti
Per dimostrare, io di solito scrivo il codice come:
@Transactional(readOnly = true)
public List<UserDTO> getAllUserAsUserDTO() {
List<UserDTO> userDTOs = new ArrayList<UserDTO>();
for(User user : getAllUser()) {
userDTOs.add(constructUserDTO(user));
}
return userDTOs;
}
private UserDTO constructUserDTO(User user) {
UserDTO userDTO = new UserDTO();
userDTO.setFullName(user.getFullName());
userDTO.setId(user.getId());
userDTO.setUsername(user.getUsername());
userDTO.setRole(user.getRole());
userDTO.setActive(user.isActive());
userDTO.setActiveText(user.isActive() ? "Active" : "Inactive");
return userDTO;
}
Qui l'utente è l'entità del database:
@javax.persistence.Entity
@Table(name = "USER")
public class User extends Entity {
@Transient
private static final long serialVersionUID = -112950002831333869L;
private String username;
private String fullName;
private boolean active;
private String role;
// other fields
public User() {
super();
}
@NaturalId
@Column(name = "USERNAME", nullable = false)
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
@Column(name = "FULL_NAME")
public String getFullName() {
return fullName;
}
public void setFullName(String fullName) {
this.fullName = fullName;
}
@Column(name = "ACTIVE", nullable = false)
public boolean isActive() {
return active;
}
public void setActive(boolean active) {
this.active = active;
}
@Column(name = "ROLE")
public String getRole() {
return role;
}
public void setRole(String role) {
this.role = role;
}
}
E questo è l'UserDTO:
public class UserDTO extends BaseDTO {
private static final long serialVersionUID = -3719463614753533782L;
private String username;
private String fullName;
private String role;
private String activeText;
private Boolean active;
//other properties
public UserDTO() {
super();
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getFullName() {
return fullName;
}
public void setFullName(String fullName) {
this.fullName = fullName;
}
public String getRole() {
return role;
}
public void setRole(String role) {
this.role = role;
}
public String getActiveText() {
return activeText;
}
public void setActiveText(String activeText) {
this.activeText = activeText;
}
public Boolean getActive() {
return active;
}
public void setActive(Boolean active) {
this.active = active;
}
}
Così Mi stavo chiedendo se questo è l'unico modo per copiare le proprietà tra due oggetti. Immagino di non essere sicuro. Inoltre sto usando lambdaj, quindi c'è un metodo in questa API da cui posso copiare tutte queste proprietà per creare una lista di altri oggetti?
Questo argomento può sembrare soggettivo, ma desidero davvero sapere da voi esperti i modi in cui è possibile eseguire la trasformazione dell'oggetto da una forma all'altra in cui i campi massimi hanno la stessa stringa.
Possibile duplicato (https://stackoverflow.com/questions/1432764/any-tool- for-java-object-to-object-mapping) – tkruse