ロギングはAOPの主な使用例です。さらに、クラスを特定のロギング実装と結合しないようにDIを使用する場合として、ロギングラッパーも例示されています。しかし、some consider logging wrappers an anti-pattern。主に、このようなビューは、ほとんどの場合、ラッパーが単純化され、ロギングフレームワークに特有の多くの機能を削除する傾向があるためです。これらの機能を実装する場合は、フレームワークを直接使用するだけではいかがですか。ロギング、アスペクト指向プログラミング、および依存性注入 - すべてのことを理解しようとしています
私はCommon.Loggingファサードに、log4Net、EntLib、NLogの機能を十分に抽象化しようとしていることに気付いています。しかし、ここでも、Common.Loggingに依存しています。インターフェースやそのようなコードやユニットのテスト方法ではなく、プロジェクトが終了したとき(最後のリリースから1年以上経過している)、またはサポートされていないロガーに後から切り替える場合は、問題が発生する可能性があります。前記
、ロギングをAOPを介して達成された場合、それは(すなわち理由だけ直接NLogを言う参照しない)ログ依存ためのDIを使用することも必要ですか?はい、コードのAOP部分は緊密に結合されていますが、単体テストをしたいクラスのロジックには少なくともロギングが発生する前にロギング依存関係がありません。この時点で私は少し失われている(私はまだAOPを試していない)。製織後、AOPコードにDIを使用しないと、テスト対象のメソッドを単体テストする際に問題が発生しますか?または、AOPコードを製織することなく、単体テストをテストできますか?
ロギングがソフトウェアのユーザーの要件でない限り、モックでロギングが発生したことをテストすることがどれほど有用かはわかりません。私は、テスト対象メソッドのビジネスロジックが、テストに最も関心のあるものであると考えています。最後に、TDD/BDDを使用する場合は、AOPコードのロギング依存関係にDIを使用する必要はありませんか?または、1つだけではない試乗物事のAOP側?
私は、クロスカットに関するAOPと設計/テストのためのDIの両方を使用するアプリケーションを開発するための最も実用的なアプローチを感じています。 AOPは比較的新しく、ロギングが最も一般的な例であるため、推奨されるアプローチは何ですか?
関連:https://stackoverflow.com/questions/9892137/windsor-pulling-transient-objects-from-the-container – Steven