首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >缓存DAOs的模式:策略还是修饰器?

缓存DAOs的模式:策略还是修饰器?
EN

Software Engineering用户
提问于 2014-12-24 15:02:10
回答 2查看 4K关注 0票数 4

我正在使用Services/ DAOs /Domain模式构建一个php系统,现在是为DAOs实现缓存系统的时候了。

您是使用装饰图案,还是使用策略模式?

每个人的起起落落是什么?

添加要求:正如我在回答edalorzo的评论中说的那样,我需要能够在某些时候使用DAO而不需要任何缓存。因为相同的方法有时是可以接受的,但有些时候不是。

EN

回答 2

Software Engineering用户

回答已采纳

发布于 2014-12-24 18:04:17

我看到了使用代理模式实现缓存。特别是像AOP这样的框架在大多数情况下都使用代理。

根据“可重用面向对象软件的设计模式与元素”一书,装饰者和代理模式可能看起来很相似/

第216页:

“虽然装饰器可能具有与代理类似的实现,但装饰器有不同的用途。装饰器向对象添加一个或多个职责,而代理控制对对象的访问。代理在多大程度上像装饰器一样实现,保护代理可能完全像装饰器一样实现。另一方面,远程代理将不包含对其实际主题的直接引用,而只包含一个间接引用,例如“主机ID和主机上的本地地址”。虚拟代理将从间接引用(如文件名)开始,但最终将获得和使用直接引用“

看来您使用缓存的目的是避免直接访问真实的主题,因此在我看来,它更像是一个代理。

上面的评论还清楚地表明,代理和装饰器之间的一个重要区别是,代理可能负责实例化或访问真实的主题,而在装饰器的情况下,则希望动态地提供这种引用。

似乎代理和实际主体之间的关系比装饰者的关系更加静态。

尽管如此,在你的情况下,最终是一个意图的问题,而不仅仅是设计的样子。最后,解决方案是有一个包装对象(称为代理或装饰器),它将拦截该方法,并允许您根据缓存策略控制何时访问缓存或不访问缓存。

票数 4
EN

Software Engineering用户

发布于 2014-12-24 15:33:18

我在过去以两种方式实现了它,我的经验是,使用装饰器可以使两个类之间的职责更清晰地分离,因为使用策略需要在数据访问类中提供支持,而使用装饰器编写数据访问类就像在实现缓存时一样。

票数 2
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/267304

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档