मेरे एप्लिकेशन के आर्किटेक्चर में मैं आमतौर पर डेटा लेयर से ऑब्जेक्ट की ऑब्जेक्ट की सूची या सेवा परत के माध्यम से वेब परत पर भेजता हूं, जिसमें इन ऑब्जेक्ट्स को DAO से बदल दिया जाता है DTO ऑब्जेक्ट और इसके विपरीत ऑब्जेक्ट करें। वेब परत में डीएओ ऑब्जेक्ट्स तक कोई पहुंच नहीं है और डीएओ परत डीटीओ का उपयोग नहीं करती है।डीटीओ पैटर्न: दो ऑब्जेक्ट्स के बीच गुणों की प्रतिलिपि बनाने का सबसे अच्छा तरीका
प्रदर्शित करने के लिए, मैं आमतौर पर कोड लिखने के रूप में:
@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;
}
}
तो मैं सोच रहा था कि क्या यह दो वस्तुओं के बीच गुणों की प्रतिलिपि बनाने का एकमात्र तरीका है। मुझे लगता है मुझे यकीन नहीं है। इसके अलावा मैं lambdaj का उपयोग कर रहा हूं, तो क्या इस एपीआई में कोई तरीका है जिसके द्वारा मैं इन सभी गुणों को अन्य ऑब्जेक्ट्स की सूची बनाने के लिए कॉपी कर सकता हूं?
यह विषय व्यक्तिपरक हो सकता है, लेकिन मैं वास्तव में उन विशेषज्ञों से जानना चाहता हूं जिनके द्वारा एक रूप से दूसरे रूप में ऑब्जेक्ट का परिवर्तन किया जा सकता है जहां अधिकतम फ़ील्ड समान स्ट्रिंग होते हैं।
की संभावित डुप्लिकेट (https://stackoverflow.com/questions/1432764/any-tool- के लिए जावा-ऑब्जेक्ट-टू-ऑब्जेक्ट-मैपिंग) – tkruse