DTO-Muster: Die beste Methode zum Kopieren von Eigenschaften zwischen zwei Objekten

In meine Anwendung-Architektur, die ich versenden in der Regel das Objekt oder Liste von Objekten, die von der data access layer, web-layer über die service-Schicht, in dem diese Objekte sich von einem DAO Objekt zu einem DTO Objekt und Umgekehrt. Die web-Schicht haben keinen Zugang zu DAO-Objekte und die DAO-Schicht, verwenden Sie keine DTOs.

Zu demonstrieren, Schreibe ich normalerweise den code 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 der Benutzer ist der Datenbank-Entität:

@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 dies 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;
    }
}

Also ich Frage mich, ob dies ist der einzige Weg, um kopieren von Eigenschaften zwischen zwei Objekten. Ich denke, ich bin nicht sicher. Auch ich bin mit lambdajso gibt es eine Methode, die in dieser API, die ich kopieren kann, alle diese Eigenschaften zu erstellen, die Liste mit den anderen Objekten?

Thema klingt subjektiv, aber ich möchte wirklich von dir wissen, Experten die Möglichkeiten, mit denen die transformation des Objekts von einer form zur anderen getan werden kann, wo die maximale Anzahl Felder haben dieselbe Zeichenfolge.

InformationsquelleAutor der Frage Tapas Bose | 2013-02-27

Schreibe einen Kommentar