web-dev-qa-db-ja.com

考えられるAOPのユースケースは何ですか?

アプリケーションの設計にAOPが効果的に関与する可能性のあるケースを示したいと思います。私がこれまでに会ったのは:

  • ロギング関連
  • セキュリティチェック
  • トランザクション管理
  • レガシーアプリケーションの調整

他に何か?

(必ずしもSpringのプロキシベースのAOPである必要はありません。JBossAOPではありません。)

関連する質問

54
Ondra Žižka

私たちがそれを使用する2つの例をあげることができます:

  • リモート管理のためにオブジェクトをJMXに自動的に登録します。クラスに@AutoRegisterアノテーションが付けられている場合、そのクラスの新しいインスタンス化を監視し、それらをJMXに自動的に登録するアスペクトがあります。

  • 監査ログ(ゴールドスタンダードのAOPユースケース)。少し粗いですが、一般的なアプローチは、監査可能なアクションを表すメソッドに注釈を付けることです。 Spring Securityのようなものと組み合わせると、次のようなかなり良いアイデアを得ることができます。

    • ユーザーは誰ですか
    • 彼らがどのメソッドを呼び出しているか
    • 彼らが提供しているデータ
    • メソッドが呼び出された時刻
    • 呼び出しが成功したかどうか(つまり、例外がスローされた場合)
29
Kevin

適用性の観点からAOPの範囲を確認するには、本を読むことを強くお勧めします Aspect-Oriented-Software-Development-Use-Cases 。この本では、AOPを使用した機能要件と非機能要件のユースケースについて詳しく説明します。その後、ロギング、トレース、セキュリティなどよりも多くの要件にアスペクトを使用できることがわかります。

7
Pedro Ghilardi

リストしたすべてのものに加えて、AOPの効果的な使用法の1つは、検証です。ユーザー入力またはビジネスオブジェクトの検証。

あなたが見なければならない関連記事。

4
Adeel Ansari
  • 読み取り/書き込みロック。同じスニペットを複製する代わりに、アスペクトを使用して、読み取りロックまたは排他ロックを必要とするメソッドを定義しました。
4
ewernli

メソッドがステートレスの場合、メソッドレベルのキャッシュ(同じパラメーター値で繰り返し呼び出されたときに同じ値を返すことを意味します)。これは、データベースのヒットを回避するため、DAOメソッドの場合により効果的です。

4
Adi
  • 例外処理:try ... catch、catch、catchなどの恐ろしいリストを繰り返す必要はありません-例外処理が一貫していることが保証されていることも意味します。
  • パフォーマンスの監視:アスペクトの使用は邪魔にならず、事後に実行でき、不要になったときにオフにできるため、非常に便利です。
3
Michael Wiles

ソフトウェアライセンス管理に使用します。つまり、コンピューターに特定のライセンスがインストールされている場合にのみソフトウェアの実行を許可します。これはセキュリティチェックの形式であるため、リストされている用途とそれほど違いはありません。

実用的な実装を説明するブログエントリを公開しました ここ

3

コードコントラクトのランタイムチェック。 。NETのコードコントラクト AOPを使用して

ランタイムチェック。私たちのバイナリリライタは、プログラム実行の一部としてチェックされるコントラクトを挿入することによってプログラムを変更します。

1
Adrian Rus

INotifyPropertyChangedおよび同様のホラー。

基本的に、このようなコードがある場合は常に、アスペクトを使用すれば完了です。

1
Turing Complete

また、次の側面もお勧めします。

  • 非同期メソッド呼び出し
  • モニタリング

SpringとtcServer(開発者)を使用すると、@ Componentアノテーションを使用してすべてのSpringBeanを簡単に監視できます。使用時間、例外を含む入力データと戻りデータを確認できます。

1
Espen

AspectJを使用してAOPを実現します。上記以外の使用例は次のとおりです。

  • メソッド呼び出しへのアクセスを少数のクラスのみに制限します。
  • 選択したメソッド/クラス/フィールドに自動的に注釈を付けます。
0
nitish712