我有脱脂的在线文件,阅读wiki项,员额和博客,但我仍然感到困惑。

  • 什么样的是,概括地说, 面向方面编程 ?
  • 它只是更好,然后向对象编程?我应该忘掉的面向对象?
  • 如果不是,我怎么知道何时使用一个或另一个?什么之间的主要差异是两个?
  • 我可以refact一个到的吗?

我一直都是一个面向对象的人和我想知道如果我需要对犯有叛国罪。

说真的,我是开始一个新的项目很快就和我想做的正确的选择,在开始。

有帮助吗?

解决方案

是什么,简而言之,面向方面编程?

简而言之,AOP是能够注入行动成的典型流的另一个程序,悄悄地。它让你捕捉类实例,方法的呼吁,分配,等等。

它只是更好,然后向对象编程?我应该忘掉的面向对象?

不,没有。它一起工作的任何程的环境,支持它。(见上文)。

如果不是,我怎么知道何时使用一个或另一个?什么之间的主要差异是两个?

你使用AOP,一般来说,当你想要实施某种行动在数以百计的课程,无需操纵类本身。典型的例子是安全(授权的权利的给予方法/class)或记录。以我的经验,不过,我不要使用它。(我不会用它在所有,老实说).

如上所述,主要差别并不真正存在的,因为它们不是可比的。但是,说你想要实现的日志记录"正常"的,你刚刚叫的记录在适当的点:

log.write("hello");

但与AOP,您可以创建一个'方面',附有每种方法的呼吁,并记录'b的方法叫做'.这一点是,在AOP你的方法是更多的猎枪':附加的一切,或者只是一个小的子集。手动增加登录一般更好的。

我可以refact一个到的吗?

不真正相关,看其他的答案。再次与安全,可以换到一个AOP的模式,从一个典型的面向对象的模型这一点。IsAllowed()来的东西一样,如果(callingMethod.HasAttribute(foo)){允许=true;}

希望这些问题的答案是有用的。让我知道如果你要我进一步扩大。

其他提示

不,AOP的补充,面向对象,而不是取代它。AOP和面向对象提供不同种类的"胶水"来帮你把行为。面向对象,当然,你可以结合行为,通过继承权和组成等。AOP另一方面可以让你加入行为的地址 交叉问题 通过拦截 点的削减 你的新代码运之前或之后的选择方法的选择课程。

一些常见的例子的跨领域关切的是:安全、记录和交易的控制。一个基本原则的良好设计是一致性:理想的是,一段代码应该做的一件事。所以模糊的水添加的安全代码数据的接入类,例如。AOP解决特定的问题通过让你加入行为在一个"方面"和随后将这方面的所有类应当具有安全控制。

AOP是不同于面向对象,完全不同的方法来发展。

基本上,如果你已经记录、身份验证问题,性能检查代码,这将是相同的,大约,在各个部分的程序,在不同的类别。所以,你可以写你的应用程序如你想象,在爪哇,那么,当你需要添加在这些其他类型的代码(贯穿各领域的问题),那么你只是注入程序,以便他们可以汇编,但是当你看看源代码,你刚才看到的商务逻辑的需要。

为何时使用AOP或面向对象的,我会建议你写的程序,得到它的工作,然后当你拥有了它运作,看看在消除代码实际上并没有做到的功能,但提供了一些其他目的。例如,如果您需要检查的输入参数是正确的前使用它们,然后使用的一个方面。如果您有类似的事件的处理,例如引发的所有异常在数据访问层写日志文件,然后创建的一个方面。

因为你清除这些贯穿各领域的问题你的代码变得越来越小。

当你获得更多的经验,你将看到更多的使用AOP,但最初我建议把它写的,那么使用"重构"AOP。

利用日食,如果使用爪哇,为AOP,因为究ajdt插件将是非常有用看到你加入的方面。

面向方面的节目是一个吸引人的流行语插入的行动(所谓的"意见")进方法或功能的关键点就像电话和回报,等等。我有一个很大的问题与AOP,因为它违反了所有抽象的障碍,建成的语言。有没有办法为一个模块说"这是什么一方面可以乱,这是什么一个方面 不能 惹。" 因此,你能违反内部不变,你摧毁的原则的模块化的推理(可以理解的模块没有必要了解任何东西,但接口的其他模块的进口).

一些年前Raymie Stata写了一个辉煌的博士论文,关于如何面向对象的语言可能的控制 继承 并且防止它违反了关键不变量。相应的工作AOP尚待编写的。

同时与任何其他想法,收益货币,AOP享有的几个壮观的成就(例如,改进记录应用程序的设计没有登记),在整个我敦促你 限制使用AOP非常简单的案件.或者更好的是,只是说不到面向方面的程序。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top