2010-01-22 2 views
5

최근 우리 코드에서이 패턴 (?)을 가로 질러서 어떻게 유용했는지 궁금합니다. BlazeDS를 사용하여 Spring 응용 프로그램과 Flex 프런트 엔드를 제공합니다. 우리는 우리의 DTO들에 인터페이스를 사용하는 것이 너무 좋아, 결정했다 :DTO 및 인터페이스

자바


public interface ISomeDTO { 
     Integer setId(); 
     void getId(Integer i); 
} 

public class SomeDTO implements ISomeDTO 
{ 
.. 
} 

 

액션 스크립트


public interface ISomeDTO { 
     var id:Integer; 
} 

public class SomeDTO implements ISomeDTO 
{ 
.. 
} 

 

무엇 DTO의 인터페이스가 당신을 얻을 수 있습니까? 이들은 절대적으로 제로 로직을 가진 가벼운 오브젝트입니다. DTO는 의미가 있지만, 인터페이스는 의미가 있지만 함께는 아닙니다.

답변

3

인터페이스와 DTO가 함께 작동하지 않는 이유가 없습니다.

DTO의 도메인 개체를 만드는 공장/어셈블러를 고려하십시오. 주어진 DTO 유형을 기반으로 도메인 객체의 특정 구현을 생성 할 수 있도록 전략을 사용하여 팩토리를 구성 할 수 있습니다. 여기서 DTO는 인터페이스에 입력하는 것이 이상적입니다. (이것은 반대 방향으로도 작용합니다).

모든 DTO를 인터페이스 뒤에 두어야한다는 것은 아니지만 도메인 객체와 마찬가지로 그렇게하는 것이 유익 할 수 있습니다.

+2

그들은 귀하의 경우에 그렇기 때문에 왜 그렇게 유익한 지 알 수 있습니다. 이것은 명백한 이유가없는 한 우리의 응용 프로그램에서 표준입니다 (적어도 나에게). 내 생각은 인터페이스가 필요할 때 사용할 수 있기 때문입니다. – unscene

3

트랜잭션 기반 환경에서 DTO는 데이터베이스 엔티티를 기본 db 세션에서 분리하는 데 사용됩니다.

이러한 세션은 일반적으로 사용할 수 없으며 대부분의 엔터티는 회원 컬렉션을 지연로드하는 프록시로 구성되어 있습니다. 따라서 프록시가 된 엔터티의 컬렉션 속성에 액세스하려는 경우 프록시는 데이터베이스 트랜잭션이 있는지 여부와 관계없이이 시점에 컬렉션을로드합니다. 따라서 활성 트랜잭션이 없을 때 엔티티 구성원에 액세스하면 오류가 발생할 수 있습니다.

엔터티를보기에 전달하면 구성원에 액세스하려고 할 때 정확히 발생합니다. 트랜잭션 처리는 일반적으로 서비스 계층에서 정의되기 때문에 뷰/컨트롤러에 활성 트랜잭션이 없습니다.

  • 예를 들면 통해 공개 세션을 유지 :

    는 서로 다른 접근 방식이 있습니다이 문제를 일주하려면 엄밀히 말하면 불구하고 필터 메커니즘 (스프링의 OpenSessionInViewFilter는)이 이미이 도움이

희망을 초기화의 DAO가 필요한 회원들로 가득 찬 데이터 전송 객체를 반환 할 수 있도록 안티 패턴

  • 입니다.

  • +1

    물론 이러한 점을 이해합니다. 하지만 DTO의 인터페이스가 왜 내게 의미가 없습니까? DTO의 사용법은 여기서 인터페이스를 포함하는 것만 생소하지 않습니다. – unscene

    +0

    오, 오, 질문을 완전히 잘못 읽었습니다. 늦게까지. 나는 왜 하나가 여기에 인터페이스를 사용하는지 알지 못한다 :/ – fasseg

    +0

    적어도 나는 유일한 사람이 아니다 : P 그 대답을 고맙지 만. 잘 만들어진거야. – unscene