複製:
私がここでポッドキャストをしたり、それについてのブログエントリを読んだりするたびに、ここでも、弦理論か何かのように聞こえます。それを説明する最良の方法は、ステロイドの依存性注入による OOP ですか?
誰かがそれを説明しようとするたびに、アスペクト、[ピーナッツ アニメ サウンドの大人]、直交、[より多くのノイズ]、クロス カットの問題などのようになります。
私がここでポッドキャストをしたり、それについてのブログエントリを読んだりするたびに、ここでも、弦理論か何かのように聞こえます。それを説明する最良の方法は、ステロイドの依存性注入による OOP ですか?
誰かがそれを説明しようとするたびに、アスペクト、[ピーナッツ アニメ サウンドの大人]、直交、[より多くのノイズ]、クロス カットの問題などのようになります。
素人の用語なので、例を挙げましょう。Web アプリケーションがあり、エラーのログ記録と監査を追加する必要があるとします。実装の 1 つは、すべての public メソッドに入り、try catch ブロックなどを追加することです...
まあ、アスペクト指向はそれでごちゃごちゃ言う、あなたのメソッドの周りに私のメソッドを注入させてください。例えば、YourClass.UpdateModel()を呼び出す代わりに、システムは呼び出すかもしれません
LoggingHandler.CallMethod() このメソッドは呼び出しを UpdateModel にリダイレクトする可能性がありますが、ロギング エラーを処理するために try catch ブロックにラップします。
ここでの秘訣は、構成を通じて、またはメソッドに属性を適用することによって、このリダイレクトが自動的に行われることです。
これは、ロギング、監査、トランザクション管理、承認など、すべてのドメインに存在する非常に一般的なプログラミング要素である横断的なものに対して機能します。
この背後にある考え方は、ビジネス/アプリ層からこの一般的な配管コードをすべて削除することです。これにより、このメソッド呼び出しまたはそのメソッド呼び出しをログに記録することを心配することなく、問題の解決に集中できます。
.NET のクラスとメソッドの属性は、アスペクト指向プログラミングの形式です。クラス/メソッドを属性で装飾します。バックグラウンドで、これにより、属性の特定の機能を実行するコードがクラス/メソッドに追加されます。たとえば、クラスをシリアライズ可能とマークすると、保存または別のシステムへの転送のために、クラスを自動的にシリアライズできます。他の属性は、特定のプロパティをシリアル化不可としてマークする場合があり、これらはシリアル化されたオブジェクトから自動的に省略されます。シリアル化は、システム内の他のコードによって実装される側面であり、「構成」属性 (装飾) の適用によってクラスに適用されます。
AOP は、ビジネス ロジック内に埋め込まれないように、アプリケーション内の共通機能 (アプリケーション全体にまたがるため、横断的) を管理することを目的としています。
このような横断的な関心事の例としては、ロギング、セキュリティの管理、トランザクション管理などがあります。
フレームワークでは、いくつかの構成ファイルを使用して、これを自動的に管理できます。
古典的な例は、セキュリティとロギングです。x の発生をログに記録したり、オブジェクト z をセキュリティ アクセス制御のためにチェックしたりするためのコードをアプリケーション内に記述する代わりに、通常のコードの「帯域外」言語の仕掛けがあります。これにより、セキュリティを体系的に挿入したり、本来はセキュリティを持たないルーチンにログインしたりできます。あなたのコードがそれを提供しなくても、そのような方法で処理されます。
より具体的な例は、ファイルへのアクセス制御を提供するオペレーティング システムです。基盤となるシステムがアクセス制限をチェックするため、ソフトウェア プログラムはアクセス制限をチェックする必要はありません。
私の経験で AOP が必要だと思うなら、実際には、よく考えられた構造/システム設計に焦点を当てて、システム内の適切なメタデータ管理により多くの時間と労力を投資する必要があります。
私は現在Post Sharpを使用しています。彼らのウェブサイトから情報を読みます。メソッド呼び出しに関するセキュリティを提供するために使用します。
「PostSharp は、.NET アセンブリの分析と変換のためのオープン プラットフォームです。コードの動作を実際に追加するカスタム属性を開発できる強力でシンプルなプラグインである PostSharp Laos が付属しています。PostSharp Laos は主要な側面です。 .NET Framework 向けの指向プログラミング (AOP) ソリューションです。」