プロジェクトで依存性注入を均一に使用するための協調的な取り組みを始めたところですが、問題が発生しました。
MongoDB クエリを処理するクラスを作成しています。問題なく、MongoClient をコンストラクターへの依存関係として渡します。しかし、オブジェクトのインスタンス化に必要な変数がインスタンス化の時点で使用できない場合、依存関係をどのように処理すればよいでしょうか?
特に、MongoCollection メソッド findOne のラッパーがあります。これは、文字列を渡すと、現在 (古いコードでは) その文字列を "new MongoId($_id)" を持つ MongoId に変換し、それを検索機能。
依存性注入について学んだことから、「新しい MongoId」を持つことは悪い考えであり、文字列を MongoId に変換する関数のテスト ケースを作成するのが難しくなることは既にわかっています。
しかし、MongoId クラスがコンストラクターで id 文字列を取得する場合、どのようにインジェクションを処理すればよいでしょうか?
私が考えた唯一のことは、次のようなことを行うクラス コンストラクターにクロージャーを渡すことです。
$getMongoId = function( $id ){
return new MongoId( $id );
};
と
class MyMongo
{
function __construct( MongoClient $client, Closure $mongoIdGetter){...}
}
[この最後の部分を修正するために編集]
しかし、これはそれを処理する正しい方法ですか?もちろん、DiC を使用している場合はそれを行うことができますが、コンストラクターのクロージャーを必要とするのは少し難しいようです。依存関係を注入することについて独断的すぎますか? 新しいクラスで「new MongoId($_id)」を使用することで、これを簡単に修正できると思います。