4

DI を使用して大きなアプリケーションを作成しました。アプリケーションは、ほとんどの依存関係が注入される初期化時にブートストラップによって構成されます。すべて良好。

ただし、単純にすべての場所に挿入できないサービス*もあります。1 つの良い例は、ログ サービスです。これはログであるため、ソリューション内のすべてのクラスで、デバッグまたはトレースの目的で使用することができます。すべてのクラスが初期化時に作成されるわけではなく、一部はサード パーティによって提供されます (アプリケーションはフレームワークのようなものです)。今のところ、私の解決策はシングルトンを使用することです。シングルトン用のラッパー クラスもいくつか作成したので、可能な場合はそれを挿入できます。

それらの場所で ServiceLocator を使用する方が良いのではないかと思っていました。これにより、シングルトンが引き起こすハードカップリングが完全に削除されます。はい、クラスはロケーターに結合されますが、それらに任意の実装を提供できます。

* DDD 用語で。

PS: ここでは .NET を使用していますが、そのようにタグ付けしません。この質問は、DI を受け入れるすべての言語に当てはまると思います。

4

2 に答える 2

0

Java EE 6/7 環境では、分野横断的な最適なオプションはインターセプターを使用することです。横断的な機能は、再利用可能なインターセプターに簡単に分解できます。.NET に似たようなものがあるかどうかはわかりません。

別の方法として、設計パターン Service Locator はCDI にある程度置き換えられています。パターンは、サービス実装の詳細からアプリケーション コードに分離されます。CDI は、サービスの詳細から同じレベルの分離を提供できますが、より簡単な方法です。

アプリケーションの存続期間中に Beanの状態を維持する必要がある場合に備えて、 @Singleton.

上記は Java EE 6/7 環境に適用されます。

于 2013-10-22T20:38:56.023 に答える
0

Paul Vargas に追加する... インターセプターに似た概念は、アスペクト指向プログラミング (AOP)の概念であり、おそらく調べたいものです。

どの DI フレームワークを使用しているかわかりません。Spring .NET を使用している場合、機能は確実に利用可能です。これは、たとえば、各メソッド呼び出しを開始および終了するときに、デバッグ レベルまたはトレース レベルのログを追加する場合に役立ちます。

http://www.springframework.net/doc/reference/html/aop-quickstart.html

于 2013-10-29T14:07:44.460 に答える