最初にMaxに答えさせてください。確かに、アスペクトは優れたOOPパターンに代わるものではありません。それらは補完です。優れたAOP設計は、優れたOOP設計から始まります。ただし、OOPパターンでは、多くの配管コードを手動で作成しなければならない場合があります。このような場合、アスペクトを使用して、OOPパターンの実装を自動化することができますが、それらを置き換えることはできません。
AOPをインテリジェントに使用すると、ソリューションの理解(ビジネスコードとメンテナンスコードが混在していない)、テスト(ビジネスコードとは別にアスペクトをテストできる、つまりビジネスメソッドのトレースをテストする必要がない)が容易になります。適切に)、変更します(パターンのすべての実装を変更するのではなく、パターンを変更するときにアスペクトを変更する必要があります)。さて、AOPを悪用したり、ハッキングツールとして使用したり、以前にOOPパターンを考慮していなかったりすると、AOPのメリットよりも多くのコストが発生します。他の鋭いツールと同様に、AOPはインテリジェントに使用する必要があります。
元の質問に戻ります。
AssemblyInfo.csにアスペクトを配置する必要があると誰が言いますか?GlobalAspects.csという名前の新しいファイルを作成し、そこにすべてのアセンブリレベルのアスペクトを配置できます。確かに、AssemblyInfo.csはアセンブリレベルのメタデータ用である必要があります。
しかし、あなたのように、私はアセンブリレベルの側面が好きではありません。避けるべきだと思います。アセンブリレベルの側面の主な問題は、命名規則に依存していることであり、これは悪です。(この悪は、アカデミックAOSDコミュニティではポイントカットの脆弱性と呼ばれます。)実際、クラスまたは名前空間の名前を変更すると、アスペクトが適用されるメソッドのセットが変更され、これはすぐに悪夢になる可能性があります。そのため、命名規則に基づくアスペクトを自分で使用することはありません。
コードの可読性はどうですか?かなりの程度、読み取り可能なコードはショートコードだと思います。CreateProductというビジネスメソッドがある場合は、製品を作成するコードだけを確認したいと思うでしょう。ほとんどの場合、トランザクション、例外、またはトレースを処理するコードには興味がありません。いくつかの側面が私のためにそれを処理することを知っていれば十分です。
そして、どうすればわかりますか?PostSharpを使用すると、VisualStudioExtensionを使用できます。AspectJを使用すると、Eclipse用のAspectJプラグイン(AJDT)を使用できます。これらは、IDE内で、現在表示されているコードにどの側面が適用されているかを示します。また、本当に詳細を確認したい場合(ただし、実際に確認することはめったにありません)、デバッガーを使用してアスペクトにステップインするか、Reflectorを使用して生成されたコードを確認できます。
概要:
- 優れたAOP設計は、常に優れたOOP設計から始まります。
- アスペクトを適用するために命名規則に依存することは避けてください。
- Visual StudioまたはAJDTのPostSharp拡張機能を使用して、コードの側面を視覚化します。