我是面向方面编程概念的新手,但我想探索在我的项目中使用它来处理日志记录,报告等的想法。为此,我有一些问题:
答案 0 :(得分:23)
答案 1 :(得分:2)
我不能代表.NET的细节,但AOP和能够将钩子附加到任意方法的更一般的想法,是一种方便的技术,可以解决一些其他毛茸茸的问题。
一个例子是design by contract。假设您有一堆方法可以在其上应用一些常见的合同。您可以在调用每个方法之前和之后添加一些“建议”(AOP术语),而无需剪切&将其粘贴到每种方法中。
在测试时,了解某些内部方法的内容通常很有用。它被调用了多少次,也许它返回了什么。您可以添加一个方面来执行该监视,而无需向方法本身添加令人分心的测试代码。甚至可能无法编辑该方法的代码。
请注意方面的实施方式。一些实现是精心设计的预处理器,可能使调试代码更复杂。其他人顺利地融入语言。动态语言非常好地处理AOP。 Perl对于AOP有Aspect.pm,而对于方法钩子有更普遍的Hook::LexWrap。
答案 2 :(得分:1)
AOP对我也很有意思。在我看来,日志和性能监控,报告是AOP旨在处理的内容。对于.NET,Post Sharp是一个非常好的AOP框架。
我只是对它进行了一些实验,但似乎已经很好地实现了。
答案 3 :(得分:1)
如果您要查看Post Sharp,可以从CodePlex下载Google Book Downloader。我认为这个项目使用它。
答案 4 :(得分:0)
不要认为它完全不同。 AOP通过减少耦合,增加内聚力,通过给予某个类型1单一责任的对象来分离关注点来改进(IMO)您的设计。如果您来自.net世界,PostSharp会使用自定义属性来编写建议。如果您来自Java世界,则可以使用名为AspectJ的Java扩展。 AOP的应用程序比您通常看到的更多。