비즈니스 유형에 X라는 두 개의 클래스 (관리 빈)가 있고 두 개의 클래스가 3 개의 속성을 제외하고는 동일한 속성을 가지고 있습니다. DTO에 모든 속성이 포함되도록 할 수 있습니까? 2 bean을 확장하고 DTO를 확장 시키거나 DTO의 속성을 그룹화하여 2 bean과 연관시켜 각 bean이 속성을 설정하고 가져올 수 있도록해야합니다. 설계의 시점에서 적절한 해결책을 알고 싶습니다. 질문은 매니지드 빈과 DTO가 관계를 직접적으로 갖는 올바른 설계인가?관리 빈이 DTO를 확장 할 수 있습니까
0
A
답변
0
당신은 그렇게 할 수는 있지만 오류가 발생하기 쉽고 MVC 패러다임을 위반하고 단순히 내가하는 한 나쁜 습관을 위반하게됩니다.
두 가지 간단한 경우를 고려하고 비교하십시오. 첫 번째 경우는 이고 빈은 DTO이고 두 번째 경우는 이고 빈은 DTO입니다. 관리 콩을 생산한다이 경우에, DTO
public class ContactDto {
private String name;
}
public class ContactBean extends ContactDto {
//has name inherited
private boolean renderedAdminPanel;
public void action { }
}
를 확장
관리 콩? 그들은 언제 인스턴스화 될 것이고 어떻게 될 것인가? DAO가 ContacyBean
과 밀접하게 결합됩니까? DTO를 포기하고 대신 분리 된 엔티티를 사용하기로 결정했다면 어떻게 될까요?
모든 것이 아키텍처의 불일치를 증가시키고 관리하기가 쉽지 않습니다.
이제 대안을 생각해 보겠습니다.
이 경우 모든 논리를 DTO
public class ContactBean {
private ContactDto contactDto;//all fields contained inside
@PostConstruct
public void init() {
//get data from your service based on injected parameter's value and assign it to your DTO
}
private boolean renderedAdminPanel;
public void action { }
}
이 포함되어 관리되는 콩은 맑은이다. 또한 모든 속성이 추가 접근자를 사용하여 EL 컨텍스트에서 사용할 수 있으므로 '추가 기능'을 쓸 필요가 없습니다. 개체의 수명주기는 예측 가능하고 올바른 형식입니다.
궁극적으로 DTO는 DTO 그리고 당신은 주위에 그 정보를 전달하는 주입 현재 사용자 컨텍스트, 세션 변수 등과 같은 추가 아마도 보안 정보로 양념 싶어하지 않을 것이다. 간단하고 자체 장소에 보관하십시오.