「[[マイクロソフト系技術情報 Wiki>http://techinfoofmicrosofttech.osscons.jp/]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。 -[[戻る>IoC、AOP → DI → 依存性反転原則]] * 目次 [#t1af136a] #contents *概要 [#t4d2647f] **AOP [#t2b687cd] -AOP: Aspect Oriented Programming -アスペクト指向プログラミング **AOPとは? [#d7f9b533] ***設計目的 [#x5a18ebe] -オブジェクト指向ではうまく分離できない問題 >各メソッド内に別のメソッドを呼び出す「処理の共通的パターン」がある場合、~ オブジェクト指向ではこれを共通化できず、処理が散在してしまう。 >を「アスペクト」と呼び、 -アスペクト記述言語(若しくはこれを実現するための各種技術)を用いて、~ 「アスペクト」を別のメソッド(モジュール)に分離して記述することで、~ プログラムに柔軟性を持たせようとする試み。 ※ この問題は[[IoC]]でも解決できるが、AOPではコードの外での解決を実現する。~ アスペクト記述言語による[[ウィービング>#x5cb142b]]でコードと分離して記述する。 ***ユースケース [#vc4316f4] アスペクトの代表的な利用例としては「ロギング処理」がある。 -ロギング処理 #ref(AOP-Logging.png,left,nowrap,ロギング処理(アスペクトの代表的な利用例)) -ロギング処理のアスペクト~ 以下は、AOPを使用してロギング処理の「アスペクト」を~ 別のモジュール(or 定義)に分離して実装した例である。 #ref(ExampleOfAOP.png,left,nowrap,AOPでのロギング処理の実装例) 実際にコードが実行される際には、ルールに従って指定されたパターン の~ 「アスペクト」が織り込まれる(これをアスペクトの[[ウィービング>#x5cb142b]]と呼ぶ)。 *詳細 [#ea4b72b9] **技術 [#r06f8e62] AOPを実現する技術(方式)には下記のものがある。 -コンパイル時の静的な[[ウィービング>#x5cb142b]] -実行時の動的な[[ウィービング>#x5cb142b]] **開発基盤 [#e35b4203] 代表的なAOP開発基盤(古いかも) ***言語個別 [#s0700385] -AspectJ(Java用):http://www.eclipse.org/aspectj/ -AspectC++(C/C++用):http://www.aspectc.org/ -AspectR(Ruby用):http://raa.ruby-lang.org/project/aspectr/ ***フレームワーク個別 [#l05d9f59] -JBossAOP(Java用):http://www.jboss.org/jbossaop -Spring Framework(Java用):http://www.springsource.org/ -Seasar2(Java用):http://s2container.seasar.org/2.4/ja/ ***その他 [#ie6bd523] -AspectWerkz(Jonas Boner等によって開発):http://aspectwerkz.codehaus.org/ **ウィービング [#x5cb142b] ウィービングの指定方法には、 -定義ファイル -アノテーション(メソッド / クラス属性) -クラスのメソッド構成 などがある。 前述の説明に合わせると、透過プロキシを使用したAOPでは、 -アスペクトを透過プロキシ(後述)上に実装する。 -ウィービングされるアスペクトは、使用する透過プロキシにより決定される。 となる。 *関連 [#cb8f7ebe] **[[IoC]] [#m45a98c7] **[[DI]] [#qd0aa8f6] *参考 [#xe1c9077] -アスペクト指向プログラミング - Wikipedia~ https://ja.wikipedia.org/wiki/%E3%82%A2%E3%82%B9%E3%83%9A%E3%82%AF%E3%83%88%E6%8C%87%E5%90%91%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0 **[[.NETにおいてAOPを実現する透過プロキシ]] [#tc8cc73b] **不評 [#m7802110] AOP、不評ですね(私も全く使ってないです)。 **AOP、不評ですね(私も全く使ってないです)。 [#sed1f02b] -Qiita --AOPが不要だと考える理由~ https://qiita.com/yamaokunousausa/items/0e99aef0a0b3adb32d08 --.NET で独自の AOP を導入したら不便になってしまった話~ https://qiita.com/KoKeCross/items/4b16ff8cdad65e0fea23 ---- Tags: [[:プログラミング]], [[:.NET開発]]