Ben soru başkası benzer bir ikilem içinde çalışıyorsa uzunca bir süre önce yine sadece durumda cevap vermek istedim istendi biliyorum. Aslında yukarıdaki önerileri # 1,2,3 yapılan yazarın tüm ilişkili olduğunu ve bir sorunu çözmek için hepsini düşünmelisiniz.
Eğer aynı kimliği ile nesne istendiğinde tekrar yapmak zorunda kalmamak 1) bir eşleştiricisindeki DB nesne alınan her saklayın. Sonraki tüm aramalar mapper saklanan nesneyi döndürmek gerekir. Bu IdentityMap desen denir. Bu, belirli bir nesne türü için bir IdentityMap bir örneğini tutmak için eşleştiricisindeki özel mülkiyet yapmak elde etmek. Nesne mapper veritabanına gidecek henüz alınır değil, Site_Mapper-> get () yöntemi her zaman belirli bir kimliği IdentityMap kontrol etmelisiniz ama zaten haritada depolanan eğer yolculuk kaydeder önbelleğe örneğini döndürür veritabanı. Öyleyse onlar aynı nesne örneği için başvurular olurdu çünkü === $ b true olmalıdır $.
2) Evet ideal olarak, her zaman belirli bir zamanda IdentityMap tek bir örneğini muhafaza edilmesi amacıyla belirli bir veri eşleştiricisi (Site_Mapper) bir örneği olmalıdır. Bu Singleton desen kullanılarak yapılabilir. Bu Site_Mapper::getInstance() ki her zaman belirli bir eşleyiciye aynı örneği döndürür gibi bir gaz giderici yöntemiyle mümkündür. Ayrıca new kullanılarak istenmeyen Destekleme önlemek ve emin getInstance() bir eşleyicisini örneğini tek yolu yapmak için özel bir yöntem olarak __construct() beyan etmek zorundasınız.
3) ne yazar statik özellikleri hakkında yukarıda belirtildiği de geçerlidir. PHP birinde bir Singleton uygulamak için bir Mapper statik tutmak için mal ve örneği kullanmak zorundadır.
Ben çok Martin Fowler kitabı yukarıda belirtilen desenleri ve daha birçok bahsediyor "Enterprise Application Architecture Modelleri" öneriyoruz. Bu sizin kendi özel ORM çözüm üzerinde çalışıyorsanız özellikle salt bir iyi. Umut olur.