什么是面向方面的编程?

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

温温酱
浏览 447回答 3
3回答

芜湖不芜

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

繁星coding

为了完整性而从副本中复制(爱因斯坦):经典示例是安全性和日志记录。与其在您的应用程序内编写代码以记录x的出现或检查对象z的安全访问控制,不如使用普通代码的“带外”语言措辞,它可以系统地注入安全性或登录没有天真地将其包含在其中的例程这样一种方式,即使您的代码不提供它,它也会得到照顾。一个更具体的示例是操作系统提供对文件的访问控制。一个软件程序不需要检查访问限制,因为底层系统可以完成该工作。如果您认为根据我的经验需要AOP,则实际上确实需要投入更多的时间和精力来进行系统内适当的元数据管理,并着重考虑周全的结构/系统设计。
打开App,查看更多内容
随时随地看视频慕课网APP