依存性注入と制御反転を使用したファクトリ メソッド
あなたはファクトリ メソッドと依存関係注入 (DI) パターンについてはよく知っていますが、パラメータ化されたファクトリ メソッドに多数の依存関係がある特定のケースについてのガイダンスが必要です。
問題: パラメーター化されたファクトリーへの過度の依存
ファクトリ クラスでは、コンストラクターには 6 つの依存関係が必要で、ファクトリによって作成された各 car インスタンスには異なる依存関係のセットがあります。これにより、ファクトリの管理が難しくなり、CreateCar
メソッドに switch case
ステートメントが導入されます。
代替方法
あなたは、車のインスタンスをファクトリ コンストラクターに直接挿入するか、サービス ロケーターを使用するという 2 つの代替案を提案しました。ただし、これらのソリューションにはそれぞれ欠点があります。車のインスタンスの挿入は工場の設計原則に違反するため、サービス ロケーターの使用は一般に推奨されません。
解決策: 依存性注入の戦略パターン
ファクトリで switch case
ステートメントを使用する代わりに、依存関係の注入に Strategy パターンを採用することを検討してください。このパターンでは、それぞれが特定のタイプの車の作成専用の複数のファクトリ実装を作成できます。
実装:
ICarFactory
と ICarStrategy
のインターフェースを導入します。 ICarFactory
は車のインスタンスの作成に使用されるファクトリーを表し、ICarStrategy
はファクトリーのコレクションを表します。 Car1Factory
や Car2Factory
など、車種ごとに具体的なファクトリー クラスを実装します。これらのファクトリーは、コンストラクターを通じて必要な依存関係を注入します。 CarStrategy
を実装し、ICarStrategy
インスタンスの配列を含む ICarFactory
クラスを作成します。 CarStrategy
の CreateCar
メソッドは、ファクトリを反復処理して、要求された車種を作成できるファクトリを見つけます。 CarStrategy
インスタンスをコードに挿入します。その後、 CreateCar
メソッドを使用して、依存関係を直接指定せずに car インスタンスをインスタンス化できます。 ストラテジーモードの利点:
switch case
ステートメントを削除します以上がパラメーター化されたファクトリ メソッドで過剰な依存関係を効果的に管理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。