2010-10-01 46 views
1

您更喜欢在方法(任何DAO或服务方法)之上使用AOP缓存层的干净方法,还是您更喜欢在需要的地方注入缓存实例的全面控制方法?AOP x IoC用于缓存

我知道AOP给你提供了松散的耦合和关注点分离,但没有太大的灵活性,除非你自己编写方法拦截器。

我倾向于喜欢IoC方法,因为如果需要缓存实例并且缓存实例具有完全控制和灵活性,则可以轻松模拟缓存实例。

这就像是伐木。谁实际上将AOP用于应用程序范围的日志记录

回答

0

这是关于我们应该用“真实”的AOP在所有(由“真正的”我的意思是量化健忘,这样就可以全局启用方面,透明地对系统100%)的问题。我的意见是每次都可以避免100%透明的解决方案。如果你处于开发阶段,那么设计你的系统会更好,不要强迫你在中间代码级别进行AOP编织等技巧。另一方面,为你需要的每个组件/接口编写缓存关注,无论你如何去做,都将是相当令人不安的。我想到的最明显的方法是为每个缓存类设置一个缓存装饰器类 - 一件事多次完成。

所以我将试图遵循的路径是使用基于动态代理的一些IoC扩展完成AOP的想法。当从IoC中获取对象时,容器可以检查其配置是否应该为给定类型应用缓存,如果是,则使用缓存创建基于接口的动态代理。这个解决方案不会强迫你编写大量类似的代码,并且由于它在源代码中的可见性而不像“真正的”AOP那样混淆。有一些这样的实现,但你没有指定任何语言,所以我不能提供任何语言。

+0

Unity IOC容器可以通过不同类型的方法拦截器支持AOP。结帐MSDN。 – brumScouse 2013-05-08 20:45:02