AOPを使用して、アプリケーションプロセスで実行中の異なるスレッド間でデータを共有できますか?
-
07-07-2019 - |
質問
更新:どのコンテキストでAOPを使用する必要があるか明確ではありませんか?ロギングの目的であるセキュリティ(認証)にAOPを使用できるため、AOPを利用できる他のシナリオをいくつか提案してください。
AOPを使用して、アプリケーションプロセスで実行中の異なるスレッド間でデータを共有できますか?
解決
アスペクト指向プログラミングは、「クロスカット」を減らす必要がある場合に理想的です。コードベース内の機能。つまり、クラスに実装する必要がある共通のコード(ログ、セキュリティ)がありますが、その機能を基本クラスに抽象化することはできません。
したがって、AOPはこれらの小さな機能を実際に実行して、実行時またはコンパイル時に「クロスカット」が実行されるコードに埋め込みます。機能が存在します。
リソース
現在、AOPはC#に組み込まれていませんが、次のフレームワークでAOPを構築できます。
スレッドデータのAOP
一般に、AOPを使用してスレッド間でデータを共有することは、進むべき道ではありません。開発者がそれを行うために利用可能な他のテクニックがあります:
-
[ThreadStaticAttribute]
この属性をフィールドに追加して、次のフィールドが複数のスレッドに固有であることを.NETランタイムに指示します -
同期(最も一般的な手法)
Mutexes
、Semaphores
、ReaderWriter
ロックおよびEventWaitHandles
を使用して複数のスレッドからローカルまたはグローバルデータへのアクセスを同期します。 C#では、lock
ステートメントはMonitor
クラスの構文糖衣であり、「ロック」に使用できます。単一のスレッドからオブジェクトへのアクセス。
他のヒント
AOPは舞台裏のスマートなコード生成(コンパイル時)/実行(実行時)であると考えるので、基本的にはほとんど何でもできます。従来のコード生成のすべての利点(およびそれ以上)があり、欠点(保守性など)はありません。