2012-06-27 3 views
0

서비스 조회를위한 설계 즉, 서비스 요청을 로컬에서 처리 할 수 ​​있는지 또는 SOAP 웹 서비스 호출을 사용하여 원격 서버로 보내야하는지 결정해야합니다.). 내 마음에 제일 먼저 오는 것은 Service Locator입니다.웹 서비스와 로컬을 구분하기위한 디자인 패턴

요구 사항에 맞는 다른 디자인 패턴이 있습니까? 어떤 포인터 나 샘플 코드가 도움이 될까요?

+0

정말로해야합니까? 왜? 정확한 요구 사항은 무엇입니까? –

+0

예 존 저는합니다. 세 가지 구성 요소 A, B, C가 있다고 가정 해보십시오. 아키텍처는 3 가지가 모두 하나의 머신에 있거나 A가 머신 1에있을 수 있고 B는 머신 2에있을 수 있고 C는 머신 3에있을 수 있습니다. 또는 AB는 머신 1에, C는 머신 2에 있습니다. –

+0

.NET과 WCF를 사용한다고 가정 할 때 나쁘다고 생각합니다.이 경우 프로그래밍이 아니라 구성의 문제 일 수 있습니다. –

답변

0

서비스 검색 도구 + 공장이 정확히 필요한 것입니다.
코드, 내 소견에서, 다음과 같아야합니다

public enum ServiceOrigin { 
    REMOTE,LOCAL; 
} 


public class ServiceLocatorFactory { 
    MyService getService(ServiceOrigin origin) { 
     ///Return a proper service instance 
    } 
} 


public interface MyService { 
    void doSomething(); 
} 



ServiceLocatorFactory factory = //Get the factory somehow 
MyService service = factory.getService(ServiceOrigin.REMOTE); 
service.doSomething(); 
+0

내 코드에서 로컬 또는 원격을 캡처 할 수 없습니다. 검색을하지 않으면 로컬 컴퓨터에 서비스 구성 요소가 있는지 확인해야합니다. –

0

당신은 의존성 삽입 (Dependency Injection)을 사용할 수 있습니다. 클라이언트 (로컬 또는 원격 여부), 그들이해야 추상화에 따라 서비스의 위치 인식하지 못하는 경우 : 구성 루트를 구성 할

public interface MyService { 
    void doSomething(); 
} 

public class MyClientThatUsesMyService { 

    private MyService _service; 
    public MyClientThatUsesMyService(MyService service) { 
    _service = service; 
    } 

    public void Go() { _service.doSomething(); } 

} 

그런 다음 당신은 의존성 삽입 컨테이너 또는 (가난한 사람의 DI)를 사용할 수 있습니다 개체의 수명을 설정합니다.