面向编程?

我理解面向对象编程,并且一直在写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();
       }
    }
 }

然后使用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;
} 

不幸的是,使AOP在一个正常的大中型组织中真正有用似乎令人惊讶地困难。 (编辑支持,控制感,事实上你从不那么重要的事情导致代码腐烂,人们回家给他们的家人等等)

我把我的希望寄托在面向复合的编程上 ,这是越来越现实的东西。 它连接到许多流行的想法,并给你一些非常酷的东西。

看看这里即将推出的实施:qi4j.org/

PS。 其实,我认为AOP的美丽之一也是它的致命弱点:它是非侵入性的,如果可以的话让人们忽略它,所以它在大多数组织中将被视为次要问题。


从完整复本(爱因斯坦)复制:

典型的例子是安全和日志记录。 与在应用程序中编写代码以记录x的出现或检查对象z以进行安全访问控制相比,正常代码的“带外”语言工具可以系统地将安全性或日志记录插入不常用的例程中即使你的代码没有提供它 - 它的照顾。

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

如果您认为在我的经验中您需要AOP,您实际上需要投入更多的时间和精力在系统中进行适当的元数据管理,重点放在精心思考的结构/系统设计上。

链接地址: http://www.djcxy.com/p/22923.html

上一篇: oriented programming?

下一篇: Aspect Oriented Programming vs. Object