【问题标题】:Aspect-Oriented Programming Weakness?面向切面编程的弱点?
【发布时间】:2012-02-23 16:09:43
【问题描述】:

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

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

问题2.性能会有问题吗?我认为一个切入点就像注册一个事件监听器。运行时切入点太多,会不会拖慢程序?

谢谢,

【问题讨论】:

    标签: programming-languages aspectj spring-aop aop


    【解决方案1】:

    问题 1

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

    问题 2

    Perhaps of interest.

    性能将非常具体到实现,我不知道任何人是如何做到的,但在编译(或有效编译)的情况下,将方面的行为有效地“注入”并不是不可行的合适的地方(或达到类似目的的东西),因此对性能的影响很小。

    但是,如果将其带入解释性语言,您实际上确实处于开销的“事件侦听器”风格。

    弱点

    我不是专家,但我会得出几个结论并欢迎补充:

    • 缺乏能见度。通过查看目标无法看到哪些方面正在影响它,这可能会导致调试困难——尤其是在影响代码流的情况下。良好的 IDE 支持可能会缓解这种情况。
    • 在将方面编译到代码中时,可能会导致更大的二进制文件,尽管我认为这可以忽略不计。

    希望这会有所帮助。

    【讨论】:

    • 嗨@jstephenson,非常感谢您的及时回复。所以你的意思是,也许对于每个调用 Logger 方法的类,他们都可以指定自己的 Logger 方面?
    • 嗨@jstephenson,AOP 有什么主要弱点吗?
    • 我添加了一些潜在的弱点,但可能还有更多(当然是哲学上的)——我建议谷歌对此进行优缺点分析。
    • 我知道至少有一个通过 IDE 插件具有良好可见性的 AOP 工具:PostSharp/Visual Studio,但我不知道 AspectJ/Spring 是否存在类似的工具。
    • @mgroves Spring IDE 还能够指示建议的对象。
    猜你喜欢
    • 2014-05-03
    • 2010-10-26
    • 2011-07-31
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-23
    相关资源
    最近更新 更多