面向方面的编程弱点?

Gen*_*eni 3 aop programming-languages aspectj spring-aop

面向方面编程有什么主要弱点吗?我喜欢通过限制在其方面内对一个类的调用来缓解横切关注点的想法.但对我来说,这有点奇怪.

问题1.让我们看一下Logger类的例子.每个类/方法可能需要调用Logger类的某些方法.在Logger方面编写所有这些调用可以使将来的修改变得容易.但是,谁应该保持Logger的方面呢?如果Logger类的开发人员这样做,他/她需要有一个整个项目的全局视图,如果项目足够大,我认为这是不可能的.另一方面,如果我们允许每个人修改Logger的类,那么将有太多人访问同一段代码.如果其中任何一个出错,代码将失败.那么,一般来说,谁应该维护这些方面呢?

问题2.性能是否会出现问题?我认为一个切入点就像注册一个事件监听器.如果在运行期间有太多的切入点,它会减慢程序的速度吗?

谢谢,

jst*_*son 5

问题1

我认为这很大程度上回答了这个问题:Logger方面与Logger类/实现不同.因此,虽然Logger实现可以存在于确实执行日志记录任务的某个独立单元中,但是任何日志记录方面都存在于应用程序的域中,并且他们可以在其截取时推迟工作.因此,责任本地化为应用方面的实体,这很有意义.

问题2

也许是有趣的.

性能将非常具体到实现,我不知道任何人如何做到这一点,但在编译(或有效编译)情况下的猜测,将方面的行为有效地"注入"到适当的地方是不可行的. (或实现类似目的的事情)因此,性能损失将是最小的.

然而,把它变成解释的语言,你实际上确实处于"事件监听器"的开销风格中.

弱点

我不是专家,但我会得出一些结论并邀请任何补充:

  • 缺乏知名度.通过查看目标哪些方面影响它无法看到,可能导致调试困难 - 特别是如果影响代码流.良好的IDE支持可能会缓解这种情况.
  • 当方面被编译到代码中时,可能会导致更大的二进制文件,尽管我认为这可以忽略不计.

希望这可以帮助.