PHP tabanlı, nesne yönelimli bir projede veritabanı motoru, kullanıcı bildirimi, hata işleme gibi yardımcı nesneleri nasıl düzenler ve yönetirsiniz?
Büyük bir PHP CMS'im olduğunu varsayalım. CMS, çeşitli sınıflarda düzenlenmiştir. Birkaç örnek:
- veritabanı nesnesi
- Kullanıcı yönetimi
- öğeleri oluşturmak / değiştirmek / silmek için bir API
- son kullanıcıya mesajları görüntülemek için bir mesajlaşma nesnesi
- sizi doğru sayfaya götüren bir bağlam işleyici
- düğmeleri gösteren bir gezinme çubuğu sınıfı
- bir günlük nesnesi
- muhtemelen, özel hata işleme
vb.
Sonsuz soruyla uğraşıyorum, bu nesneleri ihtiyaç duyan sistemin her parçası için en iyi şekilde nasıl erişilebilir kılacağım.
Yıllar önce ilk yaklaşımım, bu sınıfların başlatılmış örneklerini içeren global bir $ uygulamasına sahip olmaktı.
global $application;
$application->messageHandler->addMessage("Item successfully inserted");
Daha sonra Singleton modeline ve bir fabrika işlevine geçtim:
$mh =&factory("messageHandler");
$mh->addMessage("Item successfully inserted");
ama bundan da memnun değilim. Birim testleri ve kapsülleme benim için gittikçe daha önemli hale geliyor ve anladığım kadarıyla küresellerin / tekillerin arkasındaki mantık temel OOP fikrini yok ediyor.
O zaman elbette her bir nesneye ihtiyaç duyduğu yardımcı nesnelere bir dizi işaretçi verme olasılığı vardır, muhtemelen en temiz, kaynak tasarrufu sağlayan ve test etmeye uygun yol, ancak bunun uzun vadede sürdürülebilirliği konusunda şüphelerim var.
Baktığım çoğu PHP çerçevesi, ya tekli kalıbı ya da başlatılmış nesnelere erişen işlevleri kullanmayı araştırdı. İkisi de iyi yaklaşımlar, ama dediğim gibi ikisinden de memnun değilim.
Burada hangi ortak modellerin var olduğuna dair ufkumu genişletmek istiyorum. Bunu uzun vadeli , gerçek dünya perspektifinden tartışan kaynaklara yönelik örnekler, ek fikirler ve işaretler arıyorum .
Ayrıca, konuya özel, niş veya düpedüz tuhaf yaklaşımlar hakkında bilgi almakla ilgileniyorum .
$mh=&factory("messageHandler");
anlamsızdır ve herhangi bir performans avantajı sağlamaz. Ayrıca bu, 5.3'te kullanımdan kaldırılmıştır.