2017-08-09 15 views
0

PHPのLaravelフレームワークに基づいたAPIで作業していますが、これは言語固有の問題ではありません。 APIにはサードパーティのAPIが多数使用されており、複数の構成があります。だから私は、HTTPクライアントファクトリクラスを作成したい、コードでは、私はこれのためのオブジェクトを作成し、パラメータとしてAPI名を渡すことを計画しています。主な問題は、これを特定のAPIの名前に従ってさまざまなクラスに解決する方法です。つまり、私はGoogleにクラスを初期化してGoogle APIクライアントを返す必要があり、他のAPIについては対応するクライアントで応答する必要があります。複数のサードパーティのAPIを解決するためのファクトリパターンの使用方法

このような混乱は、工場パターンの正しい使用例であり、そうでない場合は、APIクライアントを個別に呼び出す代わりに、他のパターンや標準的な方法がありますか?

+0

現在のところ、関連性のない別のクラスです。はい、すべてのクラスは同じ方法で使用する必要があります。クライアントを取得したら、特定のクライアントに対して特定のメソッドを呼び出すことができます。 –

答えて

1

ここでは、ファクトリメソッドとアダプタパターンの組み合わせを使用する必要があります。ファクトリメソッドはネイティブAPIクラスのオブジェクト(Googleなど)を作成し、アダプタは共通のインターフェイスを提供します。だから、基本的には、次の手順を実行します

  • ( サードパーティのAPIオブジェクトを参照することにより、すべての異なるAPIのためのアダプタインターフェイスを実装し
  • (あなたが必要とするすべての操作をリスト)あなたのAPI操作のためのアダプタインターフェイスを作成します。各APIに異なるクラスを作成する必要があります)
  • ファクトリメソッドでは、アダプタインターフェイスのタイプを返します。
  • これで、ファクトリメソッドから返されたオブジェクトを呼び出しコードで消費することができます。

以下はサンプルコードです。これはC#を使用しています。以下のコードをいくつか修正することができます。

public interface IApiAdapter 
{ 
    void Read(int id); 
    void Write(string data); 
} 

public class GoogleApiAdapter : IApiAdapter 
{ 
    private GoogleApiClass _googleApiClass; 
    public void Read(int id) 
    { 
     //some additional work 
     //call google api 
     _googleApiClass.readSomeData(id); 
    } 
    public void Write(string data) 
    { 
     //some additional work 
     //call google api 
     _googleApiClass.writeSomeData(data); 
    } 
} 

public class FacebookApiAdapter : IApiAdapter 
{ 
    private FacebookApiClass _facebookApiClass; 
    public void Read(int id) 
    { 
     //some additional work 
     //call facebook api 
     _facebookApiClass.readSomeData(id); 
    } 
    public void Write(string data) 
    { 
     //some additional work 
     //call facebook api 
     _facebookApiClass.writeSomeData(data); 
    } 
} 

public class ApiFactory 
{ 
    public static IApiAdapter GetApiFactory(string type) 
    { 
     if(type == "google") 
     { 
      return new GoogleApiAdapter(); 
     } 
     if(type == "facebook") 
     { 
      return new FacebookApiAdapter(); 
     } 
    } 
} 

//calling code 
IApiAdapter api = ApiFactory.GetApiFactory("google"); 
api.Read(2); 
+0

ありがとう、クナル。あなたはいくつかのコード例を提供していただけますか? –

+1

私はC#のサンプルコードで私の答えを編集しました –

関連する問題