サービス ルックアップの設計を考える必要があります。つまり、サービス リクエストをローカルで処理できるか、リモート サーバーに (SOAP Web サービス呼び出しを使用して) 送信する必要があるかを決定する必要があります。最初に頭に浮かぶのは Service Locator です。
要件に適合する他の設計パターンはありますか? ポインタやサンプルコードは役に立ちますか?
サービス ルックアップの設計を考える必要があります。つまり、サービス リクエストをローカルで処理できるか、リモート サーバーに (SOAP Web サービス呼び出しを使用して) 送信する必要があるかを決定する必要があります。最初に頭に浮かぶのは Service Locator です。
要件に適合する他の設計パターンはありますか? ポインタやサンプルコードは役に立ちますか?
Service locator + Factory はまさにあなたが必要としているものです。
私の謙虚な意見では、コードは次のようになります。
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(); }
}
次に、依存性注入コンテナーまたは (Poor Man's DI) を使用して、コンポジション ルートを構成し、オブジェクトの有効期間を設定できます。