Aspect Oriented Programming(アスペクト指向プログラミング)とは
一言で言うと「cross cutting concerns(横断的関心事)を、統一化する為の仕組み」
オブジェクト指向は結合度は高め。カプセル化して副作用を内側へ隠蔽。
疎結合にする方法例がデザインパターン。
関数型は変数の値変更をさせない。関数は同じ引数ならば同じ結果を返すことが保証されていて副作用を減らす。
アスペクト指向は複数のクラスの中から同じ機能をまとめて切り出す。
例)
ログ、トランザクション、セキュリティ、例外処理、キャッシュ、リトライなど
今のところは、AOPと言うキーワード自体は人気はない。
この機会に技術選定のメモを書いた。
https://qiita.com/miyamotok0105/private/b1eec284a0887236a4a0
AOP用語
DIコンテナに登録されてるBeanを呼ぶ場合は、内部でProxyが自動生成されてAdviceを実行してる。
アドバイス:アスペクト内の関数
ポイントカット:関数を実行する場所
ジェインポイント:関数実行のタイミング
JointPoint(実行タイミング)
Before:関数の実行前にAOP関数を実行
After:関数実行後に実行
AfterReturning:正常終了したら実行
Around:開始前と実行後に実行
AfterThrowing:異常終了時に実行
AOP事例
Laravel+AOP
→ ライブラリあるが、スター数が少ないので途中でサポート切れになる可能性あり。
Spring+AOP
→ Springコミュニティによってサポートされてる。
https://github.com/spring-projects/spring-framework/tree/master/spring-aop
Javascript+AOP
→ ほぼサンプルもない状態。
Vuejs,ReactJS+AOP
→ フロントでもやろうと思えばできそう。
Frontend AOP — React Hooks vs. Vue Composition API
https://medium.com/@vyaron/frontend-aop-react-hooks-vs-vue-composition-api-7889d917d4cf
Porxy+ DecoratorパターンでAOPを実装もできそう
https://meetup-jp.toast.com/284