Kayıt tasarım deseni hakkında kötü bir şey var mı?

1 Cevap php

Kayıt tasarım deseni PHP bunun için iyi bir çözüm var mı?

Bir sosyal ağ sitesi (facebook, myspace) için.

Diyelim ki bir tek DB bağlantı oluşturur ve bana DB şeyler ve ben oturumları idare yanı sıra bana cache öğeleri sağlayan Önbellek sınıf ve onları almak sağlayan bir Sessions sınıf yapmak sağlayan bir veritabanı sınıfı var diyelim. SO bu benim sitenin her sayfasında erişebilir olması gerekir 3 ana sınıfları. Son bir saat için Registry Desen inceledikten sonra, ben belki mükemmel bir çözüm olduğunu düşünüyorum. Ben bir kayıt nesnesi içine benim Veritabanı, Session ve Cache nesneleri saklamak ve daha sonra her sayfada veya her sınıfa kayıt nesneyi enjekte ve benim veritabanına erişimi, oturumları ve önbelleğe sahip olabilir.

Ben her sayfa ya da diğer sınıfın içinde benim ANA sınıfların tüm 3 benim tekiz yöntemini çağırmak olurdu bu yüzden önce ben bir tek desen kullanıyordum.

Yani sadece Defteri sınıfını kullanarak herhangi Downfalls var merak ediyorum? Ben görebiliyorum 1 o sınıflar hangi diğer sınıfların ve bu tür bağlıdır görmek zor olabilir gibi duruyor. Diğer sonra bu için mükemmel bir çözüm gibi görünüyor, ayrıca ben bir kayıt nesne geçirilen tüm diğer sınıfların onlara erişimi olan, onlar kayıt defterinde ayarı saklamak olduğunu bir kullanıcının kayıt sınıfının burada başka bir yazı gördüm Ben de bu özellik için iyi bir kullanım bulacaksınız eminim.

Yani burada tek soru ben bir şey eksik veya loto ben sadece sıcak yaptım ben mi?


UPDATE

Ayrıca nesneleri depolamak için bir kayıt defteri kullanıyorsanız, ben böyle bir şey yapmak gerekir ...

$this->session = $registry->getObject('session');

veya bu yerine

$this->registry->session = $registry->getObject('session');

Belki nesnenin nereden geldiğini anlamak için easiar olacak gibi ikinci yöntem gibi görünüyor?

1 Cevap

Haklısınız, Singleton s bir kayıt demek? Eğer öyleyse gerçekten istediğiniz her yerde üç küresel nesnelere erişim, ancak başka bir nesne içerdiği gibi, bu sesler.

Eğer sınıfları Cache, Sessions tanımlamak ve cache.php, sessions.php ve database.php yazdı, eğer öyleyse Database, içermesini istiyorum onları registry.php tanımlanmış bir Registry nesne içindeki tüm.

Her şeyden önce, bu örnekleme sırasını bu şekilde kontrol etmek harika. Bu sadece cache.php, sessions.php ve database.php bir require_oncenin yapmamaktan iyidir, ve bunların içinde bunu sınıfını ama tek küresel örneği değil, sadece tanımlar. Yani / bunu gerektirir nasıl dahil tarafından örnekleme sırasını denetler. Kalitesiz Tür. Daha iyi oluşturulmuş olur ve aldığında bir $registry, küresel, ilk şey yok olduğunu, Registry nesne var sırayla globalsin oluşturulması ve nasıl istediğiniz denetlemek olduğunu.

İkincisi, küresel bir tek $ kayıt defteri vardır, tek bir Registry.php olması harika. Çeşitli dosyaları oraya buraya küresellerle tanımlanması yönetmek zor olur.

Şimdi seninle kabul ettik, sana önemli bir soruyu. Nasıl bu farklı olma görüyorsunuz:

$registry->getObject('session');
$registry->getObject('database');
$registry->getObject('cache');

karşı:

$registry->getSession ();
$registry->getDatabase ();
$registry->getCache ();

Şahsen, ben ikincisi seviyorum. Sen bir süper-jenerik getObject ile elde edilen bir Session nesnesine başvurmak için bir dize "oturum" kullanmıyorsunuz. Bunun yerine, getSession() Oturumu almak için kullanıyor. Daha iyi okur.

Kayıt defteri, tüm sonra, bunları açıkca yaratan, her üç globalleri bilir, bu yüzden zaten tek bir amaç haline kilitledi. Aynı zamanda tek bir amaca bağlı somut yöntemleri ekleyerek "zayıf" ya da "kötü" değildir. Bunun yerine, ben gözbebekleri daha az kod ve daha kolay olduğunu düşünüyorum.