为了账号安全,请及时绑定邮箱和手机立即绑定

什么是面向方面的编程?

什么是面向方面的编程?

温温酱 2019-12-07 16:22:03
我了解面向对象的程序设计,并且已经编写OO程序很长时间了。人们似乎在谈论面向方面的编程,但是我从来没有真正了解过它是什么或如何使用它。基本范式是什么?
查看完整描述

3 回答

?
芜湖不芜

TA贡献1796条经验 获得超7个赞

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;


查看完整回答
反对 回复 2019-12-07
?
繁星coding

TA贡献1797条经验 获得超4个赞

为了完整性而从副本中复制(爱因斯坦):

经典示例是安全性和日志记录。与其在您的应用程序内编写代码以记录x的出现或检查对象z的安全访问控制,不如使用普通代码的“带外”语言措辞,它可以系统地注入安全性或登录没有天真地将其包含在其中的例程这样一种方式,即使您的代码不提供它,它也会得到照顾。

一个更具体的示例是操作系统提供对文件的访问控制。一个软件程序不需要检查访问限制,因为底层系统可以完成该工作。

如果您认为根据我的经验需要AOP,则实际上确实需要投入更多的时间和精力来进行系统内适当的元数据管理,并着重考虑周全的结构/系统设计。


查看完整回答
反对 回复 2019-12-07
  • 3 回答
  • 0 关注
  • 441 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信