2010-03-07 71 views
1

我在一个项目中使用ActivePattern组织的类(例如:myObject-> Load()),但现在我们需要实现一些缓存和缓存有问题。ActiveRecord模式和缓存?

为了简单起见,每个对象中的Load()方法调用DAL,我给出$ this引用,DAL填充所有值的对象。有用。但是,当我们添加一些缓存时,未序列化的对象是一个“新”对象,并且DAL无法将其发送回对象,因为我们有需要加载的对象的引用。唯一的解决方法是将缓存代码放入每个对象的Load()中,并将缓存对象中的所有属性循环获取值并将其设置回实际对象。

有没有更好的方式来使用ActiveRecord模式缓存?

+0

我很努力去理解 - 你想要缓存什么?你能给出一个你现在做什么的代码示例吗? – spronkey 2010-03-07 21:55:42

+0

我想缓存$ myObject。如果我做$ myObject-> Load(),一旦从数据库加载,我可以轻松地缓存它,因为在Load()中,我传递给了DAL myObject引用并加载了它。我可以将它保存到缓存(serialize($ this))。问题是什么时候Load()稍后的时候......它发现它在缓存中,它返回一个新的对象,但是我在对象中,而我不能这样做$ this = $ objectUnserializedFromCache;你懂了? – 2010-03-07 22:01:12

回答

0

如果我从你的评论正确理解你的问题是取代这一点。我要做的是在活动记录类上创建静态“fetch”方法,该方法将检查缓存,如果可用则返回,并且如果不返回该类的新实例。这会让你四处取代这个,你唯一需要改变的就是你加载活动记录类的方式。