- 追加された行はこの色です。
- 削除された行はこの色です。
「[[マイクロソフト系技術情報 Wiki>http://techinfoofmicrosofttech.osscons.jp/]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。
-[[戻る>.NET開発]]
-[[戻る>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]
**[[.NETにおいてAOPを実現する透過プロキシ]] [#tc8cc73b]
*参考 [#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]
**AOP、不評ですね(私も全く使ってないです)。 [#sed1f02b]
-Qiita
--AOPが不要だと考える理由~
https://qiita.com/yamaokunousausa/items/0e99aef0a0b3adb32d08
--.NET で独自の AOP を導入したら不便になってしまった話~
https://qiita.com/KoKeCross/items/4b16ff8cdad65e0fea23
----
Tags: [[:プログラミング]], [[:.NET開発]]