2008-08-24 5 views
10

일반적인 시나리오입니다. 우리는 구식 XML 웹 서비스 을 내부적으로으로 사용하여 서버 팜과 여러 로컬 클라이언트간에 통신합니다. 어떠한 제 3 자도 참여하지 않으며, 우리 자신과 고객이 사용하는 응용 프로그램 만.WCF - 도메인 개체 및 IExtensibleDataObject

우리는 현재 XML WS에서 WCF/객체 기반 모델로의 전환을 숙고하고 있으며 다양한 접근 방식을 실험 해 왔습니다. 그 중 하나는 와이어를 통해 직접 도메인 개체/집계를 전송하여 해당 개체에 대한 DataContract 특성을 호출 할 수 있습니다.

데이터 멤버의 Order 속성을 사용하는 IExtensibleDataObject와 DataContract를 사용하면 간단한 속성 버전 관리 문제에 대처할 수 있습니다 (모든 클라이언트를 제어하고 쉽게 업데이트 할 수 있음을 기억하십시오).

전선을 통해 전송 전용 전용 DTO (Data Transfer Objects)를 사용해야한다는 의견을 계속 듣고 있습니다.

왜? 그렇게 할 이유가 아직도 있습니까? 우리는 서버 측과 클라이언트 측에서 동일한 도메인 모델을 사용합니다. 물론 올바른 것으로 간주 될 때만 컬렉션을 미리 채우고 "필요합니다". 콜렉션 속성은 서비스 위치 지정자 원칙과 IoC를 사용하여 서버 측에서 직접 데이터를 가져 오는 NHibernate 기반 "서비스"와 클라이언트 측 WCF "서비스"클라이언트를 호출하여 WCF 서버 팜과 통신합니다.

그래서 우리는 왜 DTOs를 사용해야합니까? 내 경험 DTO들에서

답변

6

가 가장 유용합니다

  1. 엄밀히 와이어를 통해 전송 될 것입니다 무엇을 정의하고 특별히 그 정의에 헌신 유형을 가진.
  2. 향후 변경 사항으로부터 응용 프로그램, 클라이언트 및 서버의 나머지 부분을 분리합니다.
  3. 비 Net 시스템과의 상호 운용성. DTO는 필수 조건은 아니지만 "안전한"유형을 쉽게 설계 할 수 있습니다.

시나리오에서 이러한 디자인 기능은별로 중요하지 않을 수 있습니다. 엄격한 DTO와 공유 도메인 객체 모두에서 WCF를 사용했으며 두 시나리오에서 모두 훌륭하게 작동했습니다. 전선을 통해 도메인 객체를 전송할 때 알아 차 렸던 점은 더 많은 데이터를 보내고 (예기치 못한 방식으로) 필자가 필요로하는 것뿐이었습니다. 이것은 WCF에 대한 나의 경험 부족 때문에 다른 어떤 것보다 더 많은 가능성이있었습니다. 그러나 당신이 그 길로가는 것을 선택해야하는 것은 당신이 분명히 경계해야 할 것이기 때문입니다.

+0

옙, akmad, 이것들은 내가 가지고있는 생각과 똑같습니다. 적절한 경우 순수한 엔티티를 전송하지만 좀 더 순수한 비즈니스 프로세스 유형 호출을 위해 더 많은 명령 기반 "메시지"형식을 수행하는 방식을 사용합니다. – HenningK

6

두 가지 방법 (공유 도메인 개체 및 DTO)을 사용하여 작업 했으므로 공유 도메인 개체의 큰 문제는 모든 클라이언트를 제어하지 않을 때가 아니라 이전 경험에서 일반적으로 DTO를 사용하지 않는 경우입니다 개발 속도가 핵심이었습니다.

항상 클라이언트를 제어하지 못할 가능성이있는 경우 DTO를 권장합니다. 도메인 개체를 다른 사람의 클라이언트 응용 프로그램과 공유하면 다른 사람의 클라이언트 응용 프로그램과 내부를 연결하기 시작합니다. dev주기.

또한 버전 관리 서비스 환경에서 작업 할 때 DTO가 유용하다는 것을 알았습니다. 덕분에 응용 프로그램 내부를 근본적으로 바꿀 수 있었지만 이전 버전의 서비스 인터페이스에 대한 호출은 허용했습니다.

마지막으로 클라이언트 응용 프로그램이 많은 경우 쉽게 버전 관리가 가능한 서비스로 보호되므로 DTO를 사용하는 것이 유용 할 수 있습니다.

+0

당신은 맞습니다. 어떤 단계에서 우리는 제 3자를 참여시킬 것입니다. 그러나 저는 WCF 서비스의 최상위에 "슈퍼 레이어 (superlayer)"로서 필요한 기능을 제공하는 라인에서 더 많은 것을 생각하고 있으며, 그 다음에는 커스텀 DTO를 사용하는 것만을 생각하고 있습니다. 원하는 경우 WCF 서비스 계층 용 어댑터. – HenningK