Web services 设计模式以区分调用为Web服务和本地服务
我必须想出一个服务查找的设计,即决定服务请求是可以在本地处理还是应该发送到远程服务器(使用SOAP 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
是否有其他符合要求的设计模式?任何指针或示例代码都会有所帮助?服务定位器+工厂正是您所需要的
在我看来,代码应该是这样的:
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,在这种情况下,这将是一个配置问题,而不是编程问题。我无法在代码中捕获本地或远程。我必须检查服务组件是否存在于本地计算机上,如果它不存在,则执行查找。