私は依存性注入について読んでいて、多くのフレームワークで行われているように、XML で依存性を指定することの魅力を理解しています。私は通常、工場を呼び出して具体的なオブジェクトを取得する大規模なシステムに取り組んでおり、このウィキペディアの記事に示されているように、手動で注入された依存関係がおそらくより優れている理由を理解するのに苦労しています。
次の理由から、ファクトリを呼び出す方が良いように思えます。
- コードの呼び出しでは、特定の依存関係が存在することを認識したり気にしたりする必要はありません。
- 新しい依存関係が呼び出し先に追加された場合、呼び出しコードを変更する必要はありません。
- 呼び出しコードには、注入する具体的なインスタンスを選択する専用のロジックは必要ありません。
依存関係の注入は、呼び出し元のコードが依存関係の具象クラスを決定する必要がある場合にのみメリットがあるように思えます。「これが私のデータです。今処理します」のようなものです。
見逃したものはありますか?
更新: 明確にするために、既存のコードのほとんどはファクトリを直接呼び出します。したがって、新しい Ball オブジェクトを取得するには、次のようなコードが表示されます。
Ball myBall = BallFactory.getObject();
これらのファクトリの多くは、新しい具体的なオブジェクト タイプ (プラグイン フレームワーク) を実行時に登録できるように実装されています。
したがって、最初のコメントのいくつかを見ると、DI の場合、私の呼び出しコードは通常、Ball オブジェクトではなく、BallFactory を渡すように見えます。その利点は、クラスが使用するファクトリへの結合さえないため、クラスがよりジェネリックになる可能性があることだと思います。