2012-06-28 3 views
10

클러스터 된 완전한 Java EE 애플리케이션에서 DTO 패턴은 여전히 ​​유효한 옵션입니까? 문제의 어플리케이션은 EJB Hibernate와 Struts with Spring 등을 사용합니다. 그런 시나리오에서 도메인 객체를 전송하는 데 문제가 있습니까?DTO 패턴이 사용되지 않습니까?

편집 : 내 질문을 명확히하기 위해 현대적인 리소스와 Java EE의 개선으로 도메인 객체를 사용하지 않는 이유가 무엇입니까? DTO 패턴이 없으면 새로운 응용 프로그램에서 사용해서는 안됩니다.

답변

19

더 이상 사용되지 않습니다. DTO 패턴을 사용해야하는지 여부는 응용 프로그램 아키텍처에 따라 다릅니다. 예를 들어 JAX-WS 또는 JAX-RS를 사용하여 웹 서비스를 개발할 때 C# 또는 Python 클라이언트 응용 프로그램에서 사용할 수 있도록 웹 메소드를 통해 DTO를 보내야하며 웹 메소드는 클래스가 가진 객체를 반환하지 않아야합니다. Hibernate 어노테이션, 다른 언어보다 엔터티가 그 어노테이션이나 다른 비즈니스 로직을 사용하여 생성되지 않는다는 것을 기억하십시오.


EDIT (사용자 의견에 기반 함) : 이는 소프트웨어 아키텍처에 따라 다릅니다. 예를 들어 SOA 프로젝트를 진행하고 있으며 Services Layer 및 Presentation Layer에 DTO를 사용합니다. 더 깊숙한 곳에서는 서비스 내에서 데이터베이스 통신을 처리하기 위해 DTO를 사용하고, DB와의 통신에는 SP 만 사용하므로 Hibernate 나 다른 ORM 도구가 작동하지 않습니다. Spring DAO을 사용할 수 있으며 해당 프레임 워크는 DTO를 사용합니다. 요즘 많은 어플리케이션에서 DTO 패턴을 많이 발견 할 수 있습니다. 이 질문에 대한 좋은 것

상세 정보 :

편집 2 : DTO의 디자인을 사용하는 주된 이유를 설명 할 것이다 정보의 또 다른 소스는 Martin Fowler

결론에 의해 설명 : DTO의 아닌 있습니다 안티 패턴. DTO는 하나의 서브 시스템에서 다른 서브 시스템으로 데이터를 전달할 필요가있을 때만 사용하기위한 것이며, 통신을위한 기본 또는 표준 방법이 없습니다.

+0

예 이러한 시나리오에서 나는 DTO의 사용을 이해합니다. 결과를 DTO로 보내고 있습니다. 그러나 내부 응용 프로그램 사용을 위해 DTO는별로 사용하지 않습니다. – Thihara

+0

@Thihara 답변 귀하의 의견을 기반으로 편집 –

+0

첫 번째에 따르면 그것은 엔티티 콩이 직렬화 할 수 없다는 사실을 피하기 위해 사용되는 안티 패턴입니다. 기본 문제가 존재하지 않는 ORM이 있습니다. – Thihara

1

패턴은 순수한 디자인입니다. 패턴의 "지원 중단"은 없지만 시간이 지남에 따라 사용량이 적습니다 (또는 과다 사용).
개인적으로 DTO를 사용하지 않는 이유는 개인적으로 볼 수 없습니다.
예를 들어 oVirt 오픈 소스 프로젝트에는 가상화 도메인에 비즈니스 로직 엔티티를 나타내는 엔티티가 있습니다.
이들 엔티티는 Hibernate 주석에 의해 주석을 달거나 (실제로는 오늘 우리가 최대 절전 모드 POC에 대한 작업을 시작 했으므로) DTO로 제공해야하며, 매핑 된 주석 객체를 정리해야합니다 (예 : dozer 프레임 워크)를 사용하고 클라이언트가 사용하는
(불필요한 주석이있는 클라이언트 측 코드가 좋지 않음) 또는 엔티티가 클라이언트에 전달 된 클라이언트 객체 (값 객체)로 사용되어야하며 다른 클래스가 DTO 엔티티

위의 접근법에서 빼어난 것은 두 개의 병렬 클래스 다이어그램을 가질 수 있다는 것입니다. 하나는 DTO 용이고 다른 하나는 값 객체 (클라이언트에서 사용) 용입니다. 그러나 대부분의 경우 디자인에서 트레이드 오프 (trade- 떨어져서.
장점과 단점을 이해하고 무엇이 가장 적합한 지 선택해야합니다 (우리의 경우 클라이언트 측은 GWT이므로 DTO/서버 측 인 두 클래스 계층으로 분리하기가 더 쉬울 것입니다 또한 더 많은 서버 측 주석 만 주석을 달 수 있으며, 다른 하나는 GWT 클라이언트 코드로 전송됩니다.

+0

프런트 엔드는 GWT가 아닙니다. JSP와 jQuery가 많이 있습니다. 예 zaske 내가 무엇을 부탁하는 것은 현대의 객체 모델이 데이터를 보유하고 있기 때문에 그것들을 사용하는 것이 요점인지 여부입니다. – Thihara

2

Java EE에서 매우 유용한 패턴입니다.

관련 엔터티 개체를 EJB 빈에서 UI 계층으로 전송하는 데 DTO를 사용합니다. 엔티티 객체는 하나의 트랜잭션 (TransactionAttributeType.REQUIRED 참조)에서 DB 에서 가져 와서 DTO 객체에 저장됩니다. DTO는 이며 UI 레이어에서는입니다.