시나리오 :C# Generics/Design Patterns : 템플릿 메서드를 사용해야합니까?
나는 공통점을 가지고있는 개체 집합을 노출 3 개 가지 웹 서비스를 (사람이 대답 한 경우/내 질문에 최근에 다소 익숙 할 것을 볼 때). 필자는 중간 메서드와 서비스 개체를 변경하기 위해 일반 메서드를 사용하여 래퍼 클래스와 변환 논리를 작성했습니다.
웹 서비스를위한 인터페이스가 있는데이 질문의 목적을 위해 IService라고 부릅니다. 3 가지 구현 클래스 인 Service1Impl, Service2Impl 및 Service3Impl이 있습니다. 이들 각각은 다른 웹 서비스를 참조하고 적절한 객체간에 변환하기 위해 위에서 언급 한 일반적인 메소드를 사용합니다.
_service = ServiceWrapper.GetServiceWrapper("2");
나에게로 인스턴스화 ServiceWrapper을 줄 것이다 :
이
은 공장이 ISerivice등의 같은 적절한 구현을 만드는 데 사용됩니다 (생성자를 통해 런타임에 내 ServiceWrapper 클래스에 주입 Service2Impl.
(젠장 다이어그램은 화끈 도움이 될 것입니다!)의 각 구현 그래서
확인
public IProperty[] GetProperties(string item, IProperty[] properties)
{
Property[] props = ServiceObjectFactory.CreateProperties<Property>(properties);
Property[] result = _service.GetProperties(item, props);
return ServiceObjectFactory.CreateProperties(result);
}
이 (내가 이름을 리팩토링 할 것 같네요) 조금 혼란 보이는 : IService 인수 술 .. GetProperties를 요구하는 방법이있다.
는 기본적으로 무슨 일이 일어나고있는 것입니다 : (당신이 매개 변수에서 볼 수 있듯이)
ServiceWrapper에서이 함수의 호출은 중간 오브젝트 (IProperty)로 이루어진다.
중간 개체는 서비스마다 고유 한 속성 개체로 변환됩니다.
결과가 서비스 별 속성 개체로 돌아옵니다.
결과는 ServiceWrapper에 다시 전달되기 전에 중간 개체로 변환됩니다.
이제이 코드는 Service1Impl, Service2Impl 및 Service3Impl에 대해 정확히 동일합니다. 물론 사용 된 유형이 다른 것을 제외하고는.
누구나 동일한 코드를 3 번 가지고 있지 않도록이 작업을 수행 할 수있는 방법을 생각할 수 있습니까?
N.B : 이것은 각 구현의 모든 메소드에 해당하지 않습니다. 그냥 그들 대부분.
그건 내가 생각하기에. 감사. –