私のアプリケーションのアーキテクチャでは、通常、オブジェクトまたはオブジェクトのリストをデータレイヤーからサービスレイヤーを介してWebレイヤーに送信します。これらのオブジェクトはDAOオブジェクトをDTOオブジェクトに、またはその逆にします。 WebレイヤーはDAOオブジェクトへのアクセス権を持たず、DAOレイヤーはDTOを使用しません。実証するためにDTOパターン:2つのオブジェクト間でプロパティをコピーする最良の方法
、私は通常のようにコードを記述します。ここでは
@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;
}
ユーザーは、データベース・エンティティである:
@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;
}
}
そして、これは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;
}
}
私は、これが2つのオブジェクト間でプロパティをコピーする唯一の方法であるかどうか疑問に思っていました。私は確信していないと思う。また、私はlambdajを使用していますので、このAPIにこれらのプロパティをすべてコピーして他のオブジェクトのリストを作成する方法がありますか?
このトピックは主観的に聞こえるかもしれませんが、私は、最大フィールドが同じ文字列を持つ場所で、あるフォームから別のフォームへのオブジェクトの変換を行う方法を専門家から知りたいと思っています。
可能な複製(https://stackoverflow.com/questions/1432764/any-tool- for-java-object-to-object-mapping) – tkruse