In der Architektur meiner Anwendung sende ich normalerweise das Objekt oder die Objektliste von der Datenzugriffsebene über die Serviceschicht zur Webschicht, in der diese Objekte von einer DAO transformiert werden Objekt zu einem DTO Objekt und umgekehrt. Die Webebene hat keinen Zugriff auf DAO-Objekte und die DAO-Ebene verwendet keine DTOs.DTO-Muster: Die beste Methode zum Kopieren von Eigenschaften zwischen zwei Objekten
Um zu demonstrieren, ich in der Regel den Code schreiben wie:
@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;
}
Hier kann der Benutzer die Datenbankeinheit:
@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;
}
}
Und das ist die 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;
}
}
So Ich frage mich, ob das die einzige Möglichkeit ist, Eigenschaften zwischen zwei Objekten zu kopieren. Ich bin mir nicht sicher. Auch verwende ich lambdaj, so gibt es eine Methode in dieser API, mit der ich alle diese Eigenschaften kopieren kann, um eine Liste anderer Objekte zu erstellen?
Dieses Thema klingt vielleicht subjektiv, aber ich möchte wirklich von Ihnen Experten wissen, wie die Transformation eines Objekts von einer Form zur anderen erfolgen kann, wo die maximalen Felder die gleiche Zeichenfolge haben.
Mögliches Duplikat (https://stackoverflow.com/questions/1432764/any-tool- for-java-object-to-object-mapping) – tkruse