小编典典

什么是面向方面编程?

all

我了解面向对象的编程,并且已经编写了很长时间的 OO 程序。人们似乎在谈论面向方面的编程,但我从未真正了解它是什么或如何使用它。什么是基本范式?

这个问题是相关的,但并不完全问它:

面向方面编程与面向对象编程


阅读 73

收藏
2022-05-22

共1个答案

小编典典

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();
       }
    }
 }

然后使用 aspect-weaver 将代码编译成这样:

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;
}
2022-05-22