2008-08-30 2 views
6

내 도메인 모델을 WCF 서비스 API로 푸시하려고하는데 이러한 유형의 설정으로 지연로드 기술에 대해 생각해보고 싶었습니다.WCF 서비스 도메인 모델을 사용한 지연로드?

이 방법을 사용할 때 어떤 제안이 필요합니까? 나는 서버가로드 ... 따라서 열망로드 게으른 있어야하는데 각 속성의 GET 안타 내 목록을 반환하기 직전에, 내 응용 프로그램에이 기술 단계를 구현


. 이 문제를 설명하거나 해결책을 제안 할 수 있습니까?

편집 :이 직렬화시 보았다되지 않도록 그것은 appears 당신이 XMLIgnore 속성을 사용할 수 있습니다 .. 여전히이에 독서하지만

답변

3

는 원격 구조에 관해서는, 당신은로드 a를 방지 할 수 있습니다 전체 개체 그래프를 "제어 할 수없는 방식으로"(전적으로 적은 수의 개체가없는 경우)

Wikipedia article에는 거의 요약 된 표준 기술이 있습니다 (C#에서도 마찬가지 임). 나는 귀신과 가치 소지자를 모두 사용했으며 꽤 잘 작동합니다.

이러한 기술을 구현하려면 문제를 엄격하게 구분해야합니다. 서버에서 서비스 계약 구현 클래스는 데이터 계약을 사용하는 코드의 유일한 비트 여야합니다. 클라이언트에서 서비스 액세스 계층은 프록시와 함께 작동하는 유일한 코드 여야합니다.

이와 같이 레이어를 지정하면 서비스를 호출하는 UI 레이어와 호출되는 비즈니스 계층에 상대적으로 독립적으로 서비스가 구현되는 방식을 조정할 수 있습니다. 그것은 또한 당신에게 단원 테스트의 절반의 기회를줍니다!

4

서비스 인터페이스를 통해 지연로드를 수행하지 마십시오. 명백한 DTO를 정의하고이를 WCF의 데이터 계약으로 사용하십시오.

NHibernate (또는 다른 ORM)를 사용하여 DTO를 구성하는 데 필요한 객체를 올바르게 가져올 수 있습니다.

+0

나는 ado.net의 세계에만 머물러 있습니다 ... 당신이 언급 한이 접근법의 샘플을 제공 할 수있는 기회가 있습니까? –

+1

기본적으로 IList 또는 ICollection에서 상속받은 ProxyCollection을 만들어야하는데이 경우 항목을로드하기위한 명령을 추적 할 수 있어야합니다. 임의의 구성원에 액세스 할 때 먼저 명령을 실행하여 목록을 채 웁니다. –

1

REST 기반 (예 : ADO.NET Data Services)을 사용하여 클라이언트 코드에 transpariently 포장 할 수 있습니다.

관련 문제