酔いどれエンジニアのブログ

有限会社wisdomのスタッフブログです。主にプログラミングやアプリケーション開発の話題を書いていきます。

【プログラミング】AOP

AOPとはなんぞやって情報はあっても、 使いどころや、どのフレームワークがどうなんだって情報が見当たらなかったので、 あっちゃこっちゃのサイトを見ながら、簡単にまとめてみました。 間違ってたらごめんなさい。
AOPとは
Aspect Oriented Programming (アスペクト指向プログラミング)
元のソースコードに変更を加えずに新たな処理を追加すること。

オブジェクトとしてうまく分解ができない複数のオブジェクト間にまたがる操作を「横断要素」と呼ぶ。
横断要素の代表例としては、プログラムの実行の様子を記録するロギング操作などが挙げられる。
AOPでは、こうした要素を「アスペクト」としてモジュール化し分離することで、
把握・管理・変更を容易にする。
AOPの使いどころ
従来からあるプロキシパターンやデコレータパターン、プラグイン等の実装を、通常よりスマートに実現する。
  • トランザクション

  • ログ
    • エラーログ
    • 性能ログ
    • 操作ログ

  • 認証チェック

  • 例外処理
    各業務ロジックでは例外をTry~Catchしない。
    (握りつぶされないようにするため) 

  • キャッシュ
    DBアクセスの結果をファイルにキャッシュし、次回API呼び出し時にキャッシュファイルがあればそこから返す。 

  • データ変換
    クライアント-サーバー間の通信で変換が必要なデータモデルの変換をインターセプタで透過的に行なったり。

  • リトライ
    クライアントで認証タイムアウトになったときに、再ログインしてリトライという処理。 
AOPを使ってはいけないところ、してはいけないこと、アンチパターン
  • 修正を次々と挿し込んでいく、文字通りの「パッチ」を当てて行く用途。

  • 引数チェック
    nullチェックとか汎用的に適用できるモノはいいと思うんだけど、それだけに。
AOPフレームワークとその特徴・名称・特徴(AOP部分だけに着目)
  • Aspectj5
    歴史が長いAOPフレームワーク
    AspectJの記述はSpringなどでも利用されている。

  • Struts2
    Webアプリケーション用フレームワークにインターセプターとしてAOPを取り込んでいる。
    予め用意されているデフォルトインターセプターに追加して、独自のインターセプターを作成することもできる。
    インターセプターはActionの前後に追加される。

  • Spring 2.x
    Webアプリケーション以外でも使える。
    Struts2と組み合わせるとアクション以降部分(ビジネス層・インテグレーション層)に適用できる。

  • S2AOP
    Webアプリケーション以外でも使える。
    Javaのみでなく.Net用フレームワークもある。
    日本発信のフレームワーク
    Seaser系の他のフレームワークにも組み込まれている。
    小規模から大規模まで生産性がだせるように設計されている。(SAStrutsS2JDBC
用語
  • アドバイス
    どのような処理を行うかのことをアドバイスといいます。
    プログラム中に割って入って何を行うかということで、ログの例では「どんなログを出すか」にあたります。

  • ジョインポイント
    ジョインポイントとは、コードのどこでアドバイスの対象にするかというコード中の場所のことをいいます。
    ログの例では「どこにログを出すか」にあたります。

  • ポイントカット
    ジョインポイントの集合のことをポイントカットと言います。
    ポイントカットでは、 ジョインポイントの集合を条件であらわします。
    ログの例ではこれも「どこにログを出すか」にあたりますが、クラスやメソッドの名前などの条件を示すものがポイントカットです。

  • ウィーブ
    元のコードとアスペクトを合体させることをウィーブといいます。
    元のコードの部分部分にアスペクトだ挿入されていくので、ウィーブ(織り込み)と呼ばれるようです。
■参考URL