1

私は依存性注入の世界に飛び込んでいますが、問題に直面しています。状況は次のとおりです。

ImageGenerator特定の状況で画像を生成するがあります。これImageGeneratorに、いくつかの文字列 (filePaths) とクラスを「コンストラクター注入」しますTranslatorImageGenerator現在、とをインスタンス化する依存関係コンテナーを使用してこれを行っていますTranslator。ここまでは順調ですね。

ImageGenerator 内new Imagick(...)で、いくつかの場所をハードコーディングしました。これらの依存関係も注入する方法を探しているので、将来別のイメージ クラスに切り替えることができます。このために、2 つのクラスを使用して抽象化を作成しましたImagickImageGDImageこれらは両方とも で定義された一連のメソッドを実装しImageInterfaceます。

問題は、どのようにして正しいのインスタンスを取得ImageInterfaceするのImageGeneratorですか? いくつかのオプションを思いつきましたが、どちらも正しくないと感じています。

誰でも私を啓発できますか?


オプション #1、ImageFactory クラスを使用する

ImageGeneratorインターフェイスを実装するオブジェクトに注入できImageFactoryます。ImageFactoryインターフェイスには、 の新しいインスタンスを返すメソッドがinstantiate($filePath)ありますImageInterface。問題は、このように多くのクラスとインターフェースになってしまうことです:

ImageInterface, ImagickImage, GDImage, ImageFactoryInterface, . ImagickImageFactory_GDImageFactory

オプション #2、ImageInterface で静的ファクトリ メソッドを使用する

ファクトリのメソッドは 1 行だけになるので、クラスに静的メソッドをinstantiate追加できると考えました。次に、インスタンスをImageGenerator に挿入するだけで、新しいインスタンスを作成するファクトリとして機能します。instantiateImageInterfaceImageInterface

オプション #3、イメージのクラス名を挿入する

画像クラスのクラス名 (ImagickImageまたはGDImage) をクラスに挿入することもできImageGeneratorます。次に、そのクラス名に基づいて新しいインスタンスを作成できます。

オプション #4

?

4

0 に答える 0