1. ホーム
  2. aop

[解決済み】アスペクト指向プログラミングとは何ですか?

2022-04-19 21:03:40

質問

私はオブジェクト指向プログラミングを理解しており、長い間、OOプログラムを書いてきました。 アスペクト指向プログラミングについてはよく言われているようですが、私はそれが何なのか、どのように使うのか、よく知りませんでした。 基本的なパラダイムは何なのでしょうか?

この質問は関連するものですが、それを問うているわけではありません。

アスペクト指向プログラミングとオブジェクト指向プログラミングの比較

解決方法は?

AOPは、以下の問題に対処します。 横断的な問題 これは、ロギングや検証のように、異なるメソッドで繰り返され、通常は完全に独自のモジュールにリファクタリングすることができないあらゆる種類のコードです。AOPでは、そのようなものをメインコードから除外して、このように垂直に定義することができるのです。

function mainProgram()
{ 
   var x =  foo();
   doSomethingWith(x);
   return x;
}

aspect logging
{ 
    before (mainProgram is called):
    { 
       log.Write("entering mainProgram");
    }

    after (mainProgram is called):
    { 
       log.Write(  "exiting mainProgram with return value of "
                  + mainProgram.returnValue);
    }
 } 

aspect verification
{ 
    before (doSomethingWith is called):
    { 
       if (doSomethingWith.arguments[0] == null) 
       { 
          throw NullArgumentException();
       }

       if (!doSomethingWith.caller.isAuthenticated)
       { 
          throw Securityexception();
       }
    }
 }

そして アスペクトウィーバー を使用して、このようにコンパイルされます。

function mainProgram()
{ 
   log.Write("entering mainProgram");

   var x = foo();   

   if (x == null) throw NullArgumentException();
   if (!mainProgramIsAuthenticated()) throw Securityexception();
   doSomethingWith(x);   

   log.Write("exiting mainProgram with return value of "+ x);
   return x;
}