2010-07-15 3 views
2

DTO 유형이 도메인 모델에서 생성되고 도메인 모델의 유형간에 전달되는 것을 볼 수 있습니다. 이 좋은 습관인가?도메인 모델에서 DTO 전달

항상 DTO는 문맥 구현 (예 : 도메인/UI 경계)을 분리하기 위해 주로 문맥 경계 (즉, 객체 그래프의 가장자리)에서 사용된다고 생각했습니다.

+1

필자는 자신의 감정과 응답을 바탕으로 도메인 모델 내에서 DTO를 분석하여 가능한 한 경계까지 밀어 넣으려고합니다. Automapper를 사용하여 도메인을 DTO에 매핑합니다. – Ben

+0

+1 for AutoMapper, 그건 내가 Entity Framework 모델과 함께 사용하는 것입니다. VS2010과 함께 EFv4를 사용하는 경우 알려 주시기 바랍니다. 자동으로 DTO 클래스, AutoMapper 구성 및 DTO와 Entity 유형 (DTO 객체 그래프에서 사이클을 제거하는 기능을 포함하여 JSON으로 쉽게 직렬화 할 수 있도록 변환하는 클래스 및 확장 메소드)을 자동으로 만드는 멋진 T4 템플릿이 있습니다. DataContractJsonSerializer 사용). –

+0

@Samuel - T4 제공에 감사드립니다! 나는 불행히도 NHibernate와 함께 일하고있다 ... – Ben

답변

2

귀하의 질문은 일종의 주관적이지만 괜찮습니다. 대부분의 "엄격하고 빠른 규칙"과 마찬가지로 실제로 어렵고 빠른 규칙이 없습니다. 지침 만 있습니다. 항상 예외가 있거나 최선의 방법은 모범 사례 (예 : goto 문을 사용하여 여러 중첩 루프에서 벗어나는 것과 같은)에 대해 무언가를하는 것입니다.

도메인 모델을 사용하여 DTO 유형을 전달하는 것은 좋지 않습니다. DTO는 데이터 전송 개체를 나타내며 전송은 일반적으로 일부 경계를 가로 지르는 전송을 의미합니다. 도메인 모델에 머물고 있다면 DTO 유형으로 변환 한 다음 다시 도메인 유형으로 변환하면 안됩니다.

+0

고마워. 첫 번째 문장에서 "주관적인"것을 의미합니까? 도메인 모델 내에 DTO를 만들면 기능을 캡슐화 할 수없는 DTO 때문에 유연성이 제한됩니다. – Ben

+0

하! 나는 확실히 그것을 "잡아 주셔서 감사합니다"(주관적) 뜻이었습니다 (편집 됨). –

1

순결을 계층화하기 위해 도메인 모델과 유사한 DTO 계층 구조를 만드는 것은 나에게 반 패턴처럼 보입니다. 나는 매번 그것을 반대하고 싶습니다.

EJB 1.0에서는 이러한 방식으로 DTO를 사용하도록 권장했습니다. 이는 수시로 전달되는 엔티티 EJB가 비효율적 이었기 때문입니다. 사람들은 네트워크 트래픽을 피하기 위해 데이터를 DTO로로드합니다. 지금은 불필요하다고 생각합니다.

관련 문제