TOP比較データ> AOPの適用範囲
徹底比較!!DIxAOPコンテナ
DIxAOPコンテナ「Seasar2とSpring」

第5回:AOPとは何か
著者:豆蔵  長谷川 裕一、竹端 進   2005/12/16
前のページ  1  2   3  4  次のページ
AOPの適用範囲

   アスペクト指向についての質問に、「いったい何の処理を分離してアスペクトとすればよいのか?」というものがあります。

   これについての回答は様々あると思いますが、筆者は「システム開発をするときにはよく基盤チームを作りますよね。その基盤チームが管理できる処理であればアスペクトとして分離できると思います」と回答します。

   基盤チームが管理できる処理としては先ほどあげたトレースログ処理やトランザクション管理、例外処理、ログイン(セキュリティ)処理などがあると思います。そのような処理は基盤チームが開発当初から分離/管理しておいて、開発チームが作成した処理に付け加えるのに向いています。

   では、ビジネスロジックはどうでしょう。基盤チームが管理できるでしょうか。

   通常、ビジネスロジックは開発チームが作り、基盤チームはビジネスロジックには無関係でいることが多いと思います。そもそも規模が大きくなれば複数の開発チームが分担して作成する複雑なビジネスロジックを1つの基盤チームが管理することは難しいでしょう。

   よって、ビジネスロジックはアスペクトとして分離するのには向いていません。もちろん、小規模開発で参加メンバーのコミュニケーションが取りやすいのであれば、どんな処理でも分離して、それで開発しやすいのであれば、なんでもかんでもアスペクトとして処理してもかまわないでしょう。ただし、その場合もメンテナンスを考えると不適切になると思います。

   AOPを適用する範囲は、プロジェクトで管理可能な程度に抑える必要があります。


AOPの用語

   さて、ここまでAOPについて哲学や思想を排除した形で何ができるのかなどを記述してきましたが、ここからはAOPの知識として、代表的な用語を簡単に説明します。次回以降はSeasar2・SpringのAOPのサンプルを用いて、具体的なイメージはつかんでいただくこととして、今回は各用語の意味を大まかに理解してください。

Aspect
横断的な関心事が持つ振る舞い(処理のこと)と、いつ振る舞いを適用するかをまとめたものです。つまり、以下に記述するAdviceとPointcutをまとめたものをAspect(アスペクト)といいます。
Joinpoint
プロパティが利用された時やメソッドが呼び出された時など、Advice(振る舞い)を割り込ませることが可能なときのことです。なおAOPの実装によっては、「プロパティの利用はJoinpointにならない」「メソッドが呼び出されたときだけがJoinpointになる」などのように異なります。
Advice
Joinpointで実行される処理です。例えば、オブジェクトから分離されたログ出力などの処理はAdviceと呼ばれ、Joinpointで実行されます。
Pointcut
Joinpointのうち、Adviceを適用したいJoinpointを正規表現などを用いた条件を使用して絞り込むためのフィルタです(図3)。例えば、Adviceを適用したいのは「add」ではじまるメソッドが実行された時だけだとすると、条件を「add*」として絞り込まれたaddXxxメソッドが実行された時だけにAdviceが実行されるようにします。

表1:用語解説

AOPの要素の関係
図1:AOPの要素の関係

Joinpoint
図2:Joinpoint

Pointcut
図3:Pointcut

   さて分離された関心事は、再びソフトウェアの最終的なクラス構造に適用しなくてはいけません。このアスペクトをクラス構造に組み込む処理をWeavingもしくは織り込むと呼んでいます。アスペクトをクラスに織り込ませていくイメージから名づけられたようです。

関心事の分離とWeaving
図4:関心事の分離とWeaving

前のページ  1  2   3  4  次のページ


株式会社豆蔵 長谷川 裕一
著者プロフィール
株式会社豆蔵  長谷川 裕一
XMLの技術開発やCORBA、EJBを使用したシステム開発などを経て、現在はアジャイル開発プロセスの導入から工学的なソフトウエアプロセスの策定、オープンソースプロダクトに関するコンサルタント、アーキテクトとして常に第一線で活躍。共著として「プログラムの育てかた 現場で使えるリファクタリング(ソフトバンク)」、「Spring入門(技術評論社)」。


株式会社豆蔵 竹端 進
著者プロフィール
株式会社豆蔵  竹端 進
鉄鋼系SIerを経て現職に。現在はオープンソースプロダクトに関するコンサティング、開発支援、教育を行うチームに所属。日々、新たな技術をどのように生かしていくかを考える毎日。現在の注目対象はSeasar2とMaven。


INDEX
第5回:AOPとは何か
  アスペクト指向プログラミング(AOP:Aspect Oriented Programming)とは
AOPの適用範囲
  Adviceの種類
  AOPの仕組み