Sen kitap kontrol etmelidir Design Patterns: Elements of Reusable Object-Oriented Software
Fark ettik gibi, yararlı ve yeniden kullanılabilir nesneler içine sistem çürüyor, genişletilebilir sınıfları yapma ile sorun.
Görev pek çok faktör devreye girer çünkü zordur: kapsülleme, granularity, bağımlılık, esneklik, performans, evrim, tekrar kullanılabilirlik, ve ve üzerinde.
Eğer bazı gerçek dünya senaryo modellemek için çalışıyoruz, ya da uygulama içinde iletişim / işbirliği ve bağımlılıkları üzerinde duruluyor?
İşte tür arıyorsun ne gösteren düşünüyorum bir örnek. Çok daha, çok daha iyi örnekler kesinlikle vardır:
Ne olursa olsun onlar bir şey önbelleğe ne / Benim geliştiricilere basit, normalleştirilmiş API sunulan bir önbellek sistemi geliştirmek istedik. Ben (temel düzeyde) bir önbellek sistemi ne istiyorsun?
- Birşey (set) önbelleğe mümkün olmak istiyorum
- Ben bir şey almak için mümkün olmak istiyorum (olsun)
- Ben önbellek geçersiz edebilmek olmak istiyorum (silme)
Ben bu ile geldi:
abstract class MyNs_Cache
{
abstract public function Set($key, $data, $ttl);
abstract public function Get($key);
abstract public function Delete($key, $ttl);
}
Benim genişletilebilir temel sınıf var. Daha sonra üç sınıf önbelleğe alma MyNs_Cache_Fs
, MyNs_Cache_Apc
ve MyNs_Cache_Memcache
var
class MyNs_Cache_Fs
{
...
public function Set($key, $data, $ttl)
{
// here I use fopen/fwrite/etc. to create the cached data
}
public function Get($key)
{
// here I retrieve the file from the filesystem (if it exists)
}
public function Delete($key) { ... }
}
Bu oldukça yalındır bulunuyor. Bir FileSystem açısından önbelleği uygular. Bu benim özgün sınıf geçmiş bir şey sunmuyor.
class MyNs_Cache_Apc
{
...
public function Set($key, $data, $ttl)
{
return apc_add($key, $data, $ttl); // NOT A FILESYSTEM CALL
}
public function Get($key) { ... } // you get the idea.
// This is specific to APC, so I add the functionality HERE
// NOT in my main Caching class.
public function PurgeCache()
{
return apc_clear_cache();
}
}
Benim APC cache I (set / / silme olsun) bir önbellek sistemi istediğiniz her şeyi yapar ama aynı zamanda tüm önbelleğini (memcached benim FileSystem önbellek için yararlı ve imkansız bir şey değil) temizlemek için yeteneği sunar
class MyNs_Cache_Memcache
{
// Memcached needs a pool of servers. APC and filesystem don't.
private $servers = array(..);
// It also uses a memcached object.
private $conn;
public function __construct()
{
$this->conn = new Memcached;
foreach ($this->$servers as $server)
$this->AddServer($server);
}
... // we do all the standard stuff using memcached methods
// We also want to be able to manage our connection pool
public function AddServer($server)
{
$this->conn->addServer(...);
}
// And in some cases, we use inc/dec from memcached
// APC doesn't have this, and it makes little sense in a filesystem
public function Increment($key) { ... }
}
Şimdi ben her zaman benim önbellek nesnelerden birini almak ve sadece içinde olan $ obj-> ('some_key') alın biliyorum ve ben her zaman bir sonuç alırsınız.
Aynı şekilde, ben de şu anda çalışmak için çalışıyorum ne özgü işlevlerle erişebilirsiniz.