「[[マイクロソフト系技術情報 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開発]]

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS