私は、ほとんどのコンテンツがプライベート Web API (JSON) から派生した Web サイト (PHP) の開発を任されています。これは、アプリケーション設計の点で私にとって急な学習曲線でしたが、これまでのところ、次のことを行っています。
API との間でデータをフェッチおよび保存するためのメソッドを提供するために、PHP SDK/ラッパー ライブラリを作成しました。インスピレーションを得るために、Google Client SDK などの例を参考にしました。内部的には、GuzzleHttp を使用して面倒な作業を行います。
API から期待されるデータ応答ごとにモデル クラスを作成しました。これで、予測可能な事前定義された変数を使用して、実際のクラス モデルを操作できるようになりました。
優れた JSONMapper パッケージを使用して、API JSON 応答をモデル インスタンスに再帰的にマップしました。
今質問に。
次のような各モデルにメソッドを提供することをお勧めします。
$user->save()
これにより、モデル内で使用可能な API SDK インスタンスを使用して、インスタンス化されたオブジェクトのデータが保存されます。アプリケーションは、データ ストアの場所や API の使用方法を気にする必要はありません。すべて良い。
したがって、オブジェクトが自分自身を取得できるようにすることも良い考えだと思いました (Laravel の Foo::find() パターンのように) ので、次のような静的メソッドを作成しました。
$user = User::get_by_id(1);
問題は、これが静的メソッドであるため、User モデル内から API SDK の特定のインスタンスにアクセスする方法がないことです。すべての関数呼び出しでそれを渡すことなく、その依存関係を簡単に注入する方法はありません。
この例では「ユーザー」が「モデル」を拡張しているため、次のように使用しました。
Model::$api = new Api;
今のところこれで問題ありませんが、何らかの理由で特定のモデルで API SDK の特定のインスタンスを使用する必要がある場合は、使用できません。
オブジェクトにこれらの静的メソッドを提供しながら、API SDK の特定のインスタンスをどのように使用するのが最善でしょうか。または、間違ったツリーを吠えています。これはアンチパターンであり、代わりに作成およびフェッチのために他のメカニズムを使用する必要がありますオブジェクト?
私は現在、このようなことに苦労しているため、「PHP、オブジェクトのパターンと実践」に取り組んでいます。
前もって感謝します