我正在使用Services/ DAOs /Domain模式构建一个php系统,现在是为DAOs实现缓存系统的时候了。
您是使用装饰图案,还是使用策略模式?
每个人的起起落落是什么?
添加要求:正如我在回答edalorzo的评论中说的那样,我需要能够在某些时候使用DAO而不需要任何缓存。因为相同的方法有时是可以接受的,但有些时候不是。
发布于 2014-12-24 18:04:17
我看到了使用代理模式实现缓存。特别是像AOP这样的框架在大多数情况下都使用代理。
根据“可重用面向对象软件的设计模式与元素”一书,装饰者和代理模式可能看起来很相似/
第216页:
“虽然装饰器可能具有与代理类似的实现,但装饰器有不同的用途。装饰器向对象添加一个或多个职责,而代理控制对对象的访问。代理在多大程度上像装饰器一样实现,保护代理可能完全像装饰器一样实现。另一方面,远程代理将不包含对其实际主题的直接引用,而只包含一个间接引用,例如“主机ID和主机上的本地地址”。虚拟代理将从间接引用(如文件名)开始,但最终将获得和使用直接引用“
看来您使用缓存的目的是避免直接访问真实的主题,因此在我看来,它更像是一个代理。
上面的评论还清楚地表明,代理和装饰器之间的一个重要区别是,代理可能负责实例化或访问真实的主题,而在装饰器的情况下,则希望动态地提供这种引用。
似乎代理和实际主体之间的关系比装饰者的关系更加静态。
尽管如此,在你的情况下,最终是一个意图的问题,而不仅仅是设计的样子。最后,解决方案是有一个包装对象(称为代理或装饰器),它将拦截该方法,并允许您根据缓存策略控制何时访问缓存或不访问缓存。
发布于 2014-12-24 15:33:18
我在过去以两种方式实现了它,我的经验是,使用装饰器可以使两个类之间的职责更清晰地分离,因为使用策略需要在数据访问类中提供支持,而使用装饰器编写数据访问类就像在实现缓存时一样。
https://softwareengineering.stackexchange.com/questions/267304
复制相似问题