我必须想出一个服务查找的设计,即决定服务请求是可以在本地处理还是应该发送到远程服务器(使用 SOAP Web 服务调用)。我首先想到的是服务定位器。
是否有其他符合要求的设计模式?任何指针或示例代码会有帮助吗?
我必须想出一个服务查找的设计,即决定服务请求是可以在本地处理还是应该发送到远程服务器(使用 SOAP Web 服务调用)。我首先想到的是服务定位器。
是否有其他符合要求的设计模式?任何指针或示例代码会有帮助吗?
您可以使用依赖注入。如果客户端不知道服务的位置(无论是本地还是远程),它们应该依赖于抽象:
public interface MyService {
void doSomething();
}
public class MyClientThatUsesMyService {
private MyService _service;
public MyClientThatUsesMyService(MyService service) {
_service = service;
}
public void Go() { _service.doSomething(); }
}
然后您可以使用依赖注入容器或(Poor Man's DI)来配置您的组合根并设置对象的生命周期。
服务定位器 + 工厂正是您所需要的。
以我的拙见,代码应该如下所示:
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();