2016-04-06 15 views
4

私はsilexphp/Pimple依存性注入コンテナ(DIC)と一緒に作業していますが、古典的な工場パターンとは何かを処理する方法がわかりません。PHP依存性注入コンテナ(工場出荷時)

例:

親クラスAnimal.phpDogAnimal.phpCatAnimal.phpと呼ばれる2つの子クラスを持っています。子クラスの数になります。

この場合、新しい動物オブジェクトまたはAnimalクラスの子を作成するためのファクトリを作成したいと考えています。ピンプルではサービスごとにファクトリメソッドを作成できます。

Pimple DICを使用している間は、各サブクラス(犬、猫など)をサービスとして追加したくないと思います。特にリストが成長するにつれて。私にはDICの悪用のようだが、おそらく私は間違っている。

はAnimal Factoryサービスを作成し、Pimpleを使用してファクトリに依存関係を注入し、新しいDogまたはCatを作成することを前提としていますか?

答えて

3

はい、そうです。使用するオブジェクト(DogAnimalCatAnimal、...)を作成するサービス(AnimalFactory)を作成することができます。

簡単な例であることができる:

class AnimalFactory 
{ 
    public function createAnimal($name) 
    { 
     // some logic here with $name 

     $animal = new ...(); 
     return $animal; 
    } 
} 

$pimple['animal_factory'] = function ($c) { 
    return new AnimalFactory(); 
}; 

$dog = $pimple['animal_factory']->createAnimal('Dog'); 
+0

恐ろしいです。サニティチェックに感謝します。 – webish

関連する問題