Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Web services 设计模式以区分调用为Web服务和本地服务_Web Services_Design Patterns - Fatal编程技术网

Web services 设计模式以区分调用为Web服务和本地服务

Web services 设计模式以区分调用为Web服务和本地服务,web-services,design-patterns,Web Services,Design Patterns,我必须想出一个服务查找的设计,即决定服务请求是可以在本地处理还是应该发送到远程服务器(使用SOAP Web服务调用)。我首先想到的是服务定位器 是否有其他符合要求的设计模式?任何指针或示例代码都会有所帮助?服务定位器+工厂正是您所需要的 在我看来,代码应该是这样的: public enum ServiceOrigin { REMOTE,LOCAL; } public class ServiceLocatorFactory { MyService getService(Service

我必须想出一个服务查找的设计,即决定服务请求是可以在本地处理还是应该发送到远程服务器(使用SOAP Web服务调用)。我首先想到的是服务定位器


是否有其他符合要求的设计模式?任何指针或示例代码都会有所帮助?

服务定位器+工厂正是您所需要的
在我看来,代码应该是这样的:

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();

您可以使用依赖项注入。如果客户端不知道服务位于何处(无论是本地还是远程),则它们应该依赖于抽象:

public interface MyService {
   void doSomething();
}

public class MyClientThatUsesMyService {

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

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

}

然后,您可以使用依赖项注入容器或(穷人的DI)来配置您的合成根,并设置对象的生存期。

您确定需要这样做吗?为什么?确切的要求是什么?是的,约翰,我有。假设您有3个组件A、B、C。体系结构是这样的:所有三个组件都可以在一台机器上,或者A可以在机器1上,B可以在机器2上,C可以在机器3上。或机器1上的AB和机器2上的C。任何组合。我的缺点是假设您使用的是.NET和WCF,在这种情况下,这将是一个配置问题,而不是编程问题。我无法在代码中捕获本地或远程。我必须检查服务组件是否存在于本地计算机上,如果它不存在,则执行查找。