2010-06-30 6 views
1

우리는 처음으로 더 큰 WCF 프로젝트를 시작하려고합니다. 우리는 응용 프로그램을 올바르게 레이어하는 방법과 모든 패턴이있는 곳에서 몇 가지 염려가 있습니다.layerd 구조의 WCF에서 일반적인 패턴에 대한 질문

서비스는 주로 인터넷을 통해 고객이 인트라넷의 응용 프로그램에서 사용하고 둘째는 고객이 사용합니다.

우리의 생각은 DDD에서 영감을, 응용 프로그램이 방법으로 레이어했다 마이크로 소프트 스페인의 N Layer App :

  • 인프라 층 EF4 (POCO) 및 저장소 패턴
를 사용
  • 도메인 계층
    • 는 지금까지 우리는 여기 여기
  • 응용 프로그램 계층
    • 아무것도 아직
  • 분산 서비스 계층 (WCF)
      몇 도메인 서비스가
    • 질문이 생기기 시작하는 곳입니다.
  • 프리젠 테이션 층

이제 우리는 물질을 많이 읽고 있고, 예를 들어, 파울러는 원격 Facade 패턴을 언급하고 데이터 전송이 엔터프라이즈 아키텍처의 그의 책 패턴에 분포 패턴으로 개체 .

필자가 정면과 WCF를 올바르게 이해했다면 리모트 정면이 WCF의 서비스 계약이 될 것입니다. 그러나 Fowler는 각자 자신의 클래스 (Album Service와 같은)를 많이 가지고 있지만 WCF에서는 하나의 서비스 계약과 하나의 클래스 만 가지고 있습니다 (Microsoft는 N Layer App에서 IMainModuleService라고 부릅니다). 물론 부분 클래스를 사용하여 여러 개의 Facade를 "시뮬레이션"할 수는 있지만, 이해한다면 '그 길'처럼 느껴지지 않습니다. 그러나 이것이 WCF에서 이루어진 방식입니까, 아니면 Remote Facade 패턴을 완전히 무시합니까?

파울러 (Fowler)는 나에게 합리적이라고 생각하는 사업체 대신 DTO를 전하는 것이 좋습니다. 그러나 내가 본 많은 샘플들은 이것을하지 않습니다. WCF에서이 작업을 수행합니까?
WCF에서 DTO를 사용한다고 가정하면 이는 데이터 계약 일 것입니다. 맞습니까? DTO를 구현하는 Fowler는 비즈니스 엔티티를 사용하여 DTO를 어셈블하기 위해 AlbumAssembler 클래스 (하나의 DTO?)를 사용하는 Album Service (facade)를 사용하는 예제를 가지고 있습니다. 이 응용 프로그램/도메인 계층에서 서비스를 사용하여 수행되는 상상해보십시오?
하지만이 DTO는 어디에서 조립 되었습니까? 일부 유효성 검사가 수행되는 응용 프로그램 계층에서이 작업이 수행됩니까? 아니면이 책임이 어디에 있습니까? 나는 정말로 당신이 나에게 줄 수 있기를 바라는 몇 가지 지침과 모범 사례가 필요합니다.

다음은 우리가 귀하를 안내 할 수 있기를 희망하는 현재의 질문들 중 일부입니다. 전체 아키텍처에 대한 의견도 크게 환영 할 것입니다. 우리가 아직 많이 고려하지 않은 또 다른 질문은 엔터프라이즈 응용 프로그램에서 WCF (WIF? 사용)의 보안을 처리하는 방법에 대한 모범 사례입니다. 그 문제에 대한 의견이 있으면 공유하십시오.

답변

1

그러나 파울러는 이러한 외관의 많은 (앨범 서비스와 같은) 자신의 클래스의 각하지만, WCF에 난 단지 여러 서비스 계약을 정의 할 수 있습니다

하나의 서비스 계약과 하나 개의 클래스를 가지고있다 이들 모두는 자체 서비스 엔드 포인트를 정의합니다. 일반적으로 하나의 서비스 계약은 잘 정의 된 작업 집합을 제공해야합니다. 예를 들어 클래스가 제한된 공개 메서드 집합을 이상적으로 갖고 있어야합니다.

파울러 (Fowler)는 나에게 합리적이라고 생각하는 사업체 대신 DTO를 전할 것이라고 제안합니다. 그러나 내가 본 많은 샘플들은 이것을하지 않습니다. WCF에서이 작업을 수행합니까? WCF에서 DTO를 사용한다고 가정하면 데이터 계약이됩니다.

Datacontract 및 Datamember 속성을 사용하여 비즈니스 엔티티를 장식 할 수 있으며 이렇게하면 DTO가 될 수도 있습니다. 이것은 귀하의 사업체와 데이터 간의 결합 문제입니다. 낮은 연결을 원할 경우 전용 DTO를 정의하고 비즈니스 엔티티에서 datamember 값을 복사하십시오.

+0

감사합니다. 그러나 하나 이상의 엔드 포인트 모범 사례가 필요합니까? 단일 끝점 이상을 가진 단일 샘플 응용 프로그램을 보지 못했습니다. 끝점이 "클래스 수준"(제공해야하는 작업 측면에서) 인 경우 각기 다른 주소와 바인딩을 가진 많은 끝점을 갖게됩니다. 이게 나에게 잘못된 것 같니? 이러한 DTO를 만드는 방법에 대한 모범 사례가 있습니까? 비즈니스 개체와 정확히 같은 DTO를 몇 개 갖고 있다면 어떨까요? 틀린 일을하고 계시나요? –

+0

DTO/계약서에 자체 어셈블리가 있어야합니까? 아니면 그들은 같은 모임에서 봉사하면서 살고 있습니까? 어떻게 생각해? –

+0

일부 계약을 정의하기 전에 과도하게 분석하지 않겠습니다. 한 번에 하나의 ServiceContract에 모든 것을 넣을 수 있습니다. 당신은 서비스의 일부에 대해 다른 접근 제한을 원한다. 마찬가지로 엔티티를 datacontract 속성으로 장식하거나 엔티티의 속성을 복사하여 만든 DTO를 사용할 수 있습니다. DTO를 자동으로 만들려면 [AutoMapper] (http://automapper.codeplex.com/) 또는 [ValueInjecter] (http://valueinjecter.codeplex.com/)와 같은 객체 매퍼를 사용할 수 있습니다. – Ozan

관련 문제