2016-05-04 44 views
4

大規模な範囲で再利用できるように設計されたエンタープライズライブラリを作成する場合、クロスカッティングの設計上の懸案事項を凍結することがよくあります。今日私は、再利用可能なエンタープライズライブラリ内でトレースと診断を行うための最善の方法の分析に取り組んでいます。.NETでSOLID方式でライブラリレベルのトレースと診断を実装するにはどうすればよいですか?

.NETのBCLを見てみると、ロギングと診断はフレームワークのほんの一部ではないようです。

  • たSystem.Diagnosticsは、実行トレースのために使用されるタイプのトレース・ファミリを、持っている、とのapp.configフレンドリーソーシングおよびサブスクリプションを持つ(リスナーのために。)それは言われて、私は一般的にapp.configを憎む傾向にありますむしろ、魔法の設定文字列に付属する緩やかに型付けされた呪文を避けてください。

  • System.Diagnostics.Tracingには、イベントベースの診断に使用されるEventSourceタイプファミリーがあります。これは私のタイプですが、ロギングポリシーはドメインライブラリよりもアプリケーションの関心事なので、ライブラリで使用するかどうか、またどのように使用するべきかはわかりません。

  • 私には理にかなっている一つの可能​​性は、単に私の基礎ドメインライブラリーでは、いくつかの共通ロギング・インターフェースを定義し、アプリケーションが周囲の文脈パターンのいくつかの並べ替えを経由しての実装を注入できるようにすることです

が、これのために私自身のロギングタイプを定義します不要です。

答えて

2

私にとって理にかなっている可能性は、基本的なドメインライブラリにいくつかの共通のロギングインターフェイスを定義することです。

これは正しいです。また、デフォルトのロガー実装を作成する必要があります。システム診断トレースクラス(このライブラリのコンシューマアプリケーションによってトレースがオンになっている場合)

アプリケーションが周囲のコンテキストパターン

の代わりに他の人は単に、例えば方法を提供ロガーを注入する方法に苦労のある種介して実装を注入することを可能にしますカスタムファクトリは、ロガーインタフェースの実装を注入する。

工場は、図書館でインスタンスを提供する責任があります。実装が提供されている場合はそれを使用し、それ以外の場合はデフォルトのインスタンスをデフォルトのロガーとして使用します。ロガーのインフラストラクチャについてはEF7 library(logging)をご覧ください。

+0

これは私の考えをエコーし​​ます。私は工場を過度に使うのは好きではありませんが、コンポーネントの縫い目を交差させることは、しばしば望ましい使用法を実施するのに便利です。 –

+1

消費者がロガーの実装を提供していなければ、ライブラリは動作するはずですので、ロギングは依存性であってはなりません。今、あなたはこの状況をどのように処理するか考えることができます。 – vendettamit

関連する問題