답변:
DTO는 패턴이며 구현 (POJO / POCO)에 독립적입니다. DTO에 따르면 원격 인터페이스에 대한 각 호출은 비용이 많이 들기 때문에 각 호출에 대한 응답은 최대한 많은 데이터를 가져와야합니다. 따라서 특정 작업에 대한 데이터를 가져 오는 데 여러 요청이 필요한 경우 가져올 데이터를 DTO에 결합하여 하나의 요청 만 필요한 모든 데이터를 가져올 수 있습니다. Enterprise Application Architecture의 패턴 카탈로그에 자세한 내용이 있습니다.
DTO는 구식이 아닌 기본 개념입니다.
개념으로서의 DTO (서버가 클라이언트에 반환 할 데이터를 수집하는 목적을 가진 개체)는 확실히 구식이 아닙니다.
무엇 이다 다소 시대에 뒤 떨어진 것은 전혀 논리를 포함하지 DTO들을 가지고있는 개념이며, 사용되는 경우에만 데이터를 전송하고 클라이언트에 전송하기 전에 도메인 개체에서 "매핑", 디스플레이 층에 전달하기 전에 모델을 볼 수 있습니다 매핑. 간단한 응용 프로그램에서는 도메인 개체를 DTO로 직접 재사용하고 표시 계층으로 직접 전달할 수 있으므로 통합 된 데이터 모델이 하나만있을 수 있습니다. 보다 복잡한 응용 프로그램의 경우 전체 도메인 모델을 클라이언트에 노출하지 않으려는 경우 도메인 모델에서 DTO 로의 매핑이 필요합니다. DTO에서 데이터를 복제하는 별도의 뷰 모델을 갖는 것은 거의 의미가 없습니다.
그러나이 개념이 단순한 잘못이 아닌 구식이되는 이유는 도메인 및 뷰 모델이 POJOS가 아니고 대신 프레임 워크에 직접 연결되어 있기 때문에 일부 (주로 오래된) 프레임 워크 / 기술에 필요하기 때문입니다.
EJB 3 표준 이전의 J2EE의 Entity Bean은 POJO가 아니며 대신 앱 서버에 의해 생성 된 프록시 객체였습니다. 클라이언트로 전송할 수 없었기 때문에 별도의 DTO 계층을 가질 수 없었습니다. -필수였습니다.
DTO는 구식 패턴이 아니지만 불필요하게 적용되어 구식으로 보일 수 있습니다.
Java Enterprise 커뮤니티에서 가장 잘못 사용 된 패턴은 DTO입니다. DTO는 배포 문제에 대한 솔루션으로 명확하게 정의되었습니다. DTO는 프로세스 (계층) 사이에서 데이터를 효율적으로 전송하는 대략적인 데이터 컨테이너를 의미했습니다. ~ 아담 비엔
예를 들어 JSF ManagedBean이 있다고 가정하십시오. 일반적인 질문은 Bean이 JPA 엔티티에 대한 참조를 직접 보유해야하는지 또는 나중에 엔티티로 변환되는 일부 중간 오브젝트에 대한 참조를 유지해야하는지입니다. 이 중개 오브젝트를 DTO라고 들었지만 ManagedBeans 및 엔티티가 동일한 JVM 내에서 작동하는 경우 DTO 패턴을 사용하면 이점이 거의 없습니다.
Bean Validation 어노테이션을 고려하십시오. JPA 엔티티는 @NotNull 및 @Size 유효성 검증으로 주석이 달릴 수 있습니다. DTO를 사용하는 경우 원격 인터페이스를 사용하는 클라이언트가 기본 유효성 검사에 실패했음을 확인하기 위해 메시지를 보낼 필요가 없도록 DTO에서 이러한 유효성 검사를 반복해야합니다. DTO와 엔티티 사이에 Bean Validation 주석을 복사하는 모든 추가 작업을 상상해보십시오.보기 및 엔티티가 동일한 JVM 내에서 작동하는 경우이 추가 작업을 수행 할 필요가 없습니다. 엔티티를 사용하십시오.
IAmTheDude의 엔터프라이즈 응용 프로그램 아키텍처 패턴 카탈로그에 대한 링크 는 DTO에 대한 간결한 설명을 제공하며 여기에 더 많은 참고 자료가 있습니다.
절대적으로하지! 최근에 나는 귀하가 사용하는 비즈니스 객체 (ORM 매퍼에 바인딩 된 것)보다는 DTO를 더 잘 사용하는 방법에 대한 교훈을 얻었습니다 .
그러나 좋은 패턴 책에 언급되어 있기 때문에 사용하기에 적합하지 않고 사용하기에 적합 할 때 사용하십시오.
내 마음에 오는 전형적인 예는 타사에 어떤 종류의 인터페이스를 노출시킬 때입니다. 이러한 시나리오에서는 교환 된 객체를 상당히 안정적으로 유지하여 일반적으로 DTO로 훌륭하게 달성 할 수 있습니다.