Farklı bağımlılıklar için gereken aynı işlevselliği sunan iki bileşen


9

Ben ORM katmanı olarak Zend Framework 1 ve Doctrine2 kullanarak PHP, bir uygulama inşa ediyorum. Her şey yolunda gidiyor. Şimdi, hem ZF1'in hem de Doctrine2'nin kendi önbellek uygulamalarıyla geldiğini ve güvendiğini fark ettim. Her ikisini de değerlendirdim ve her birinin kendi profesyonelleri ve eksileri olsa da, ikisi de benim basit ihtiyaçlarım için diğerinden daha üstün değil. Her iki kütüphane de uygulamalarına değil, kendi arayüzlerine karşı yazılmıştır.

Bunun bir sorun olduğunu düşündüğüm nedenler, uygulamamın önyüklemesi sırasında, her biri kendi sözdizimine sahip iki önbellek sürücüsünü yapılandırmam gerektiğidir. Bu şekilde kolayca bir uyumsuzluk yaratılır ve bu nedenle önbellek arka ucuna iki bağlantı kurmak yetersiz kalır.

İleriye doğru en iyi yolun ne olduğunu belirlemeye çalışıyorum ve size sunabileceğiniz her türlü bilgiyi memnuniyetle karşılarım.

Şimdiye kadar düşündüğüm dört seçenek var:

  1. Hiçbir şey yapmayın, önbellek işlevi sunan iki sınıfın bulunduğunu kabul edin.
  2. Zend'in arayüzünü Doctrine'in önbellek uygulamasına yapıştırmak için bir Cephe sınıfı oluşturun.
  3. Seçenek 2, tersi - Doctrine'in arayüzünü Zend Framework arka ucunda eşlemek için bir Cephe oluşturun.
  4. Hepsine hükmedecek bir arayüz oluşturmak için çoklu arayüz kalıtım kullanın ve çakışma olmadığından dua edin (örneğin: her ikisinde de "kaydet" yöntemi varsa, PHP'ler nedeniyle parametreleri aynı sırayla kabul etmeleri gerekir. uygun polimorfizm eksikliği).

Hangi seçenek en iyisidir veya farkında olmadığım "Yukarıdakilerin hiçbiri" varyantı var mı?


3
Belki de PHP, ZF veya Doktrini bilmeyen insanlar için sorunu daha genel bir yazılım tasarımı anlamında tanımlamalısınız. İki kütüphane aynı şeyi önbelleğe alıyor mu? Öyleyse, neden bir önbelleği devre dışı bırakmıyorsunuz? Değilse, sorun nedir? Bu tür bir şey.
idoby

Daha önce kendi ORM ve veritabanı erişim önbellek sağlayıcısı olan bir .NET CMS ile çalıştım. Daha sonra CMS'yi tamamen farklı önbellek sağlayıcısı kullanan iş platformumuzla entegre etmek zorunda kaldım. Bu, iş platformu önbellek sağlayıcımız ölçeklendirilebildiğinde, CMS içindeki önbellek sağlayıcısının bir web çiftliği için ölçeklenebilir olmaması nedeniyle bir soruna neden oldu. Ne gibi sorunlarla karşı karşıyasınız?
CodeART

Symfony2'ye ve bu sorunu nasıl ele aldıklarına bir göz atın.
nietonfir

Yanıtlar:


7

Hiçbir şey yapma Ayrı projelerin kendi alanlarında çalıştıkları sürece (birbirlerini önbelleğe almadığı sürece) fazlalık olabileceğini kabul edin. Doktrin, Zend'in önbelleğe sahip olduğunu biliyor ancak Zend'e bağımlı olmak istemiyorlar ya da tam tersi. Tüm insanlar Zend ve Doktrini kullanmak istemez.

Doktrin kodunun kendi eşyalarını kullanmasına ve ZF'yi diğer her şey için kullanmasına izin verirdim. Bu şekilde sadece ZF sınıflarını bilmem gerekiyor. Doktrin önbelleği yalnızca veritabanı nesnesi için doktrin tarafından dahili olarak kullanılmalıdır. ZF, html sayfa önbellekleme ön ucu gibi bir ORM dışında yararlı olan daha fazla ön uca sahiptir.

Başka bir katman oluşturmak ideal olacaktır, ancak projeye başka bir bağımlılık katacaktır, bu yüzden bakım için çok iyi değildir.

Bootstrap'te birden çok önbellek kurmak için gereksiz görünebileceğini biliyorum. ZF1, Doctrine ve ZF2'yi aynı anda kullanmaya çalışırsanız daha da kötüleşebilir. Ancak, sadece arka uçlara bağlanmayan, sadece değişkenleri ayarladıkları için çok küçük bir sabit zaman.

Yani, programlama, bakım ve işletim açısından onları yalnız bırakardım.


3

Bunun bir sorun olduğunu düşündüğüm nedenler, uygulamamın önyüklemesi sırasında, her biri kendi sözdizimine sahip iki önbellek sürücüsünü yapılandırmam gerektiğidir. Bu şekilde kolayca bir uyumsuzluk yaratılır ve bu nedenle önbellek arka ucuna iki bağlantı kurmak yetersiz kalır.

Neden sorunu sadece "yapılandırmayı daha uygun hale getir" açısından ele almıyoruz?

Başka bir deyişle, yapılandırma verilerinizi kabul eden ve her iki önbellek sürücüsüne uygulayan yeni bir sınıf yazın. Tabii, esnek değil, ama aynı zamanda daha az yanlış gidebilir.


0

Neden arayüzünüzün her bir çerçeve için uzmanlaşabilecek bir soyutlaması yaratmıyorsunuz? Her iki önbelleği de içine alan, ihtiyacım olan yöntemlerle kendi önbellek Denetleyicimi yazardım. Sonra onları unutabilir ve sadece Denetleyicimle konuşabilirim. Bu çözümle ilgili bir sorun mu var?

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.