2

依存性注入について質問があります。

それを呼び出すクラスを作成したいとします、WebGetTask

WebGetTask には HttpService への依存関係が必要です

悪いコード 1 コード:

private HttpService  httpService;
...   
List<WebGetTask> list = new ArrayList<WebGetTask>();   
for(...)   
{   
   list.add(new WebGetTask(httpService)); 
}
...

わかった。httpService が挿入されているため、これが悪いことはわかっていますが、新しい WebGetTask での作成を除いて、使用されることはありません

OK 悪いコード 2 コード:

private WebGetTaskFactory webGetTaskFactory;
...  
List<WebGetTask> list = new ArrayList<WebGetTask>();  
for(...)  
{   
    list.add(webGetTaskFactory.newTask());  
}  
...

私たちは工場を使用しているので、これはより良いと思いますが...しかし..

私が立っている場所から、WebGetTaskFactory ではまだ HttpService を注入しており、新しい WebGetTask を作成するという唯一の目的以外には何もしていないことがわかります。

私の質問を要約すると、新しいオブジェクトがコンストラクターに依存関係 (HttpService) を必要とする場合に、単に依存関係 (HttpService) を注入して渡すことなく、新しいオブジェクト (WebGetTask) を作成するファクトリ クラス (WebGetTaskFactory) を設計するにはどうすればよいですか? というか、これがやり方か。もしそうなら、それはすべて良いです、そうでない場合は、DIとファクトリーパターンを適切に使用する方法を教えてください。ありがとう。

4

3 に答える 3