Ben bir memcached nesneyi işlemek için bir sınıf yazıyorum. Fikir abstract class Cachable
yaratmak ve (örneğin, kullanıcı, Post, vb gibi) tüm önbelleklenemez nesneler alt sınıfları olacağını sınıfı söyledi.
Sınıfı, Load()
hangi soyut işlevi LoadFromDB()
nesne önbelleğe değilse, yenilemek için işlevler / önbellek geçersiz, vb aramaları gibi bazı yöntem sunmaktadır
Ana problem Load()
içinde; Ben benzer bir şey yapmak istedim:
protected function Load($id)
{
$this->memcacheId = $id;
$this->Connect();
$cached = $this->memcache->get(get_class($this) . ':' . $id);
if($cached === false)
{
$this->SetLoaded(LoadFromDB($id));
UpdateCache();
} else {
$this = $cached;
$this->SetLoaded(true);
}
}
Ne yazık ki $this
olmak $cached
(önbelleğe alınan nesne) gerekir; Bunu yapmak için herhangi bir yolu var mı? Kötü bir tasarım fikri "her önbelleklenemez nesne önbelleklenemez sınıfından türeyen" oldu?