2016-10-18 13 views
0

私のアプリケーションでは、すべてのリクエストを処理するサービスマネージャがあります。このService Managerは、特定の種類の要求を満たすために外部サービスを使用します。GUICEを使用して外部サービスを使用するデザインサービスマネージャクラス

たとえば、サンプルコードの下に考えてみます。

Class ServiceManager{ 

    private final A a; 
    private final B b; 

    private ExternalService externalService; 


     @Inject 
     public ServiceManager(A a, B b) 
     { 
       this.a =a; 
       this.b =b; 
     } 

     public void processIncomingRequestUsingExternalService(){...} 


     } 

ために、Guiceの

  • 使用セッター・インジェクションを使用して優れているアプローチExternalServiceを初期化し、将来のように「n」の数があるかもしれませんがこのタイプの外部サービスは、このService Managerが使用したいかもしれない画像になります。
  • 私のアプリケーションの内部クラスであるクラスAとクラスBのオブジェクトのために、コンストラクタインジェクションを使用してください。

注: - ここではExternalServiceは外部サービスのヘルパーです。

+1

コンストラクタ・インジェクション>すべての(例えばhttp://olivergierke.de/2013/11/why-field-injection-is-evil/) 。また、全能のマネージャークラスが悪いです。単一責任の原則は依然として大きなn =通常悪い設計に適用されます。 – zapl

+0

@zapl大きなnの私のポイントは、私のマネージャーが使用しなければならないかもしれない2 - 3の外部サービスといえます。これらの外部サービスヘルパをすべてコンストラクタに追加するとよいでしょう。 –

答えて

0

コンストラクタ注入はセッター注入に対して以下の利点を有する:

  • 明示的にコードを読んでいる誰に依存関係を宣言する。
  • ユニットテストはよりクリーンになります。
  • 依存関係に 'final'とマークすることで、不変性を高めることができます。

詳細の違いについて説明します良いドキュメント:https://www.petrikainulainen.net/software-development/design/why-i-changed-my-mind-about-field-injection/

関連する問題