Zend Framework hizmeti katmanı uygulamak nasıl?

3 Cevap php

Ben Zend Framework iç hizmet katmanı uygulamak öğrenmek için bazı iyi kaynaklar arıyorum. This is interesting post Bookie Link, fakat somut bir kod örnekleri.

  • Hizmet sınıfları (? /application/modules/modulename/services/) nereye koymak;
  • Onları autoload Nasıl (özel autoloader?)
  • En yaygın hizmetleri (kullanıcı, kimlik doğrulama, cart, önbellek, beslemek?)
  • Örnek uygulamaları (herhangi github repo?)
  • İyi uygulamalar?

3 Cevap

Ben bu soruya cevabı, sizin ihtiyaçlarınıza bağlıdır zaman kısıtlamaları ve yazılım geliştirme / stil için genel bir yaklaşım bence.

Geçenlerde (A) genel ORM çözümleri ve farklı ZF uygulama yapılarını araştıran bir LOT zaman geçirdim, çok sıkı bir süre ve (B) bir küçük ama karmaşık web uygulaması üzerinde Zend Framework kullanmak için karar aldık. Ben gelmiş sonuç orada bir tek beden herkese uyar çözüm değildir ve yaratıcı almak ve you ile mutlu bir uygulama yapısı oluşturmak için çekinmeyin gerektiğini olmasıdır.

Eğer sıkı zaman kısıtlamaları ve uygulama çok büyük değilse, o zaman sadece Application_Model_BlahService gibi isimlerle birlikte sınıfları oluşturmak ve application/models dizinde saklayın ve onlar aldı alacak olabilir otomatik yükleyici tarafından varsayılan (autoloader doğru önyükleyicisini olmuştur varsayarak) tarafından.

Başka bir nedenle, daha dizinlere sınıfları dışarı bölmek istiyorum, eğer uygulama büyük ya Ama eğer uygulama dizini altında kendi alt-dizinleri oluşturmak ve {var olacağı aşağıdaki kodu gibi bir şey (kullanabilirsiniz [(0)]}) otomatik yükleyici için bu sınıfları eklemek için:

protected function _initResourceLoader()
{
    $this->_resourceLoader->addResourceType( 'service', 'services', 'Service' );
    $this->_resourceLoader->addResourceType( 'serviceplugin', 'services/plugins', 'Service_Plugin' );
}

Daha sonra application/services/plugins/TaxPlugin.php ikamet ediyorum application/services/Invoice.php ikamet ve Application_Service_Plugin_TaxPlugin olur Application_Service_Invoice gibi sınıflar, oluşturabilirsiniz. (Not: Yukarıdaki kodu Zend_Application kullandığınız varsayılır).

Siz, teoride kadarıyla sizin gibi bu alabilir ve veri erişim sınıfları, vs vs vs Ama servis sınıflardan ayrı modeli sınıfları tekrar, tercih gelişme tarzına bağlıdır, takımın büyüklüğü ve, bir dereceye kadar, ne gereksinimleri sebat katman size dayatır.

Son bir şey soracağım: Varsayılan olarak otomatik yükleyici eklenen kaynakların bir listesi için Zend_Application_Module_Autoloader bir göz var. (Ben bu cevap ZF 1.8 + bahsediyorum sözü var mı?)

Sen hizmet katmanı iş almak için hack gerekmez. Standart autoloader uygulama içinde hizmet klasöründe bir kaynak ad SERVICE_ vardır. Yani, uygulama \ hizmetlerden hizmet katman yük olacak, sınıfları SERVICE_ * adlandırma desen takip etmelidir.

Temel olarak, muhtemelen gibi bu her yere koyabilirsiniz; modele yakın bir yerde büyük olasılıkla olsa da, mantıklı olacaktır.

Örnek olarak, size bir bakmak isteyebilirsiniz:

  • ZFPlanet : an example of a planet developped with ZF
    • Emin değil o bitmiş, ancak birkaç sınıfları, kontrolörleri, modeller, yapılandırma dosyaları vardır ediyor ...
    • Kod geçiyor yardımcı olabilir anlamına gelir (it has, for me, for some things)
  • And, especially, its application/modules/zfplanet/models/Service directory
    • Hangi iki sınıfları içerir.

(Well, I hope that's the sort of thing you meant by Service, actually)