2008-10-07 2 views
2

일반적인 쿼리 패턴을 가진 사람들을 돕기 위해 팩토리를 제공하고자하는 복잡한 쿼리 메커니즘을 구축했습니다. 내 메서드는 모두 SOAP 웹 서비스로 WCF를 통해 공개됩니다. 내 고객이 .net을 사용하는 것을 기대하지 않기 때문에 내 서비스를 사용하고자하는 모든 고객이 내 공장을 쉽게 사용할 수 있도록하는 가장 좋은 방법은 무엇입니까?WCF를 사용할 때 팩토리 메서드를 만드는 가장 좋은 방법은 무엇입니까?

업데이트 : 필자가 작성한 "쿼리 시스템"에 대한 일반적인 패턴을 지원하는 팩토리 메서드를 작성하고 싶습니다. 현재 여러 개의 OperationContracts가 내 서비스 및 여러 DataContracts에 노출되어 있습니다. 필자는 자신이 원하는 가정 패턴을 지원하기 위해 커스텀 질의 객체를 반환하기 위해 Factory의 무언가를 만드는 가장 좋은 방법에 대한 정신적 인 단서를 가지고 있습니다.

구체적인 예는 다중 일치 개념의 여러 그룹이있는 검색 요청 개체를 기반으로 데이터베이스에서 조회수를 반환하는 한 가지 방법이 될 수 있습니다.이 코드는 모두 LINQ 표현 트리,이 중 하나의 공통 그룹으로 변환됩니다. 검색 요청 객체는 실제적으로 약 20 개의 일치 그룹 인 결과를 미국 원산지의 소스로 제한하는 것이므로 하드 코딩 된 코드 예제를 표시하는 대신 그룹 객체 만 반환하는 것이 좋습니다 검색 요청 개체에서 사용할 수있는 항목의 원본 위치에 대한 데이터를 기반으로합니다. "GroupFactory.CreateGroupOfSomethingOrOther"와 같은 Factory Method에 이상적으로 들리지만,이 작업을 수행하는 가장 좋은 장소는 무엇입니까? 아니면 내가해야 할 것보다 훨씬 더 복잡하게 만드는 것일까 요?

답변

1

각 소비자에 대해 모국어로 라이브러리를 제공하지 않으면 실제로 공장을 제공 할 수 없습니다. 그룹화 개체를 반환하는 팩터 리 대신 덜 세밀한 구성이 필요한 일부 필터 개체를 추가하는 필터를 고려하십시오.

GetMatches(new GetMatchRequest() { 
     Filter = new FilterByState() { 
      "AZ", "CA", "OH", ... }}); 

이 고려 : 대신 예를 들어

, 모든 일반적인 필터는 FilterBase 같은에서 파생 또는 IFilter을 구현

GetMatches(new GetMatchRequest() { Filter = new FilterByCountry("USA") }); 

. 서버 측에서는 더 세분화 된 객체를 반환하기 위해 FilterBase.ConstructQueryObject()과 같은 것을 호출하십시오.

관련 문제