我对这条线感到困惑
面向方面的编程和依赖注入是非常不同的概念,但是在少数情况下它们可以很好地结合在一起。
从这个网站
http://www.postsharp.net/blog/post/Aspect-Oriented-Programming-vs-Dependency-Injection
我了解DI优于AOP的优势,但是为什么 他们不是经常在一起使用吗?为什么只有少数情况下它们可以放在一起?是否由于AOP的编译方式而使两者都难以使用?
您如何定义“有限情况”?我自己总是一起使用AOP和DI。
基本上有三种应用AOP的方法,它们是:
DI与代码编织工具的使用不能很好地混合和匹配,我认为这就是Postsharp网站指出“在有限的情况下它们可以很好地融合在一起”的原因。它不能混合和匹配的一个原因是,依赖注入是关于松散耦合的,而代码编织则在编译时将代码和方面硬耦合在一起。从DI的角度来看,代码编织成为一种反模式。在本书的11.2节中,马克和我非常清楚地说明了这一论点。总而言之,我们声明:
DI的目的是通过将Seams引入您的应用程序来管理易失性依赖性。Theis使您可以在“合成根”内部集中对象图的合成。
这与您在应用编译时编织时实现的帽子完全相反:是导致易失性依赖项在编译时耦合到您的代码。这使得无法使用适当的DI技术以及在应用程序的Composition Root中安全地组成完整的对象图。出于这个原因,我们说编译时编织与DI相反-在挥发性依赖项上使用编译时编织是一种反模式。[第355页]
但是,如果使用动态拦截,则意味着通过动态生成装饰器在运行时应用横切关注点,它可以与DI一起使用,并且可以轻松地与大多数DI库集成,并且在使用Pure DI时也可以完成,这是我们在11.1节中演示的。
我个人的喜好是使用装饰器。我的系统被设计围绕一个少数明确定义通用的抽象,这让我在那是我的系统是重要的,几乎所有的地方应用横切关注点。这使我在极少数情况下会出现一些装饰效果不佳的地方,但这几乎总是由设计缺陷引起的。由于我自己作为开发人员的局限性,或者由于.NET框架或某些其他工具的设计缺陷而引起的。INotifyPropertyChanged
接口是一种著名的设计缺陷。您可能已经猜到了,但是在我们的书中,我们非常详细地描述了这种方法。我们在这个主题上花了整整一章(10)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句