Zend Framework MVC Tasarım

2 Cevap php

Ben de zfforums bu soruyu sordunuz, ama belki ben burada bir yanıt alırsınız.

Yani Zend Framework genel amaçlı, esnek, loosly birleştiğinde, yüksek kaliteli çerçevedir. Ancak, tutarsız ve aşırı karmaşık MVC parçaların bazılarını bulabilirsiniz. Umarım sizin bazı zf tasarım kararlarının, bazı haklı ve bazı sorulara cevap verebilir:

Genel Sorular / Yorumlar

  1. Neden diğer zend bileşenleri olarak aynı adlandırma kuralları takip mvc Zend değil mi? Örneğin, mvc kolayca özdevinimli olamaz böylece çoğul dizin adları ve sınıf isimleri dizin bilgisi ile başlamazlar küçük harf kullanır.

  2. Ben bir modül kök dizin eklemek seçeneği istiyorum. Bu şekilde, ben açıkça denetleyici / modül dizinleri ekleyerek dağıtıcı yapılandırmak zorunda olmazdı. Ben bir modülde bırakın ve hemen erişilebilir olması mümkün olurdu.

  3. Neden bakış ve eylem yardımcıları arasında bir ayrım var mı? Şu anda, yardımcıları kod boyunca paylaşılmak üzere tasarlanmış ve yükleme ve yardımcıları erişim tutarsız yöntem vardır değildir. Diğer çerçeveler her yerde kodu aynı yardımcıları paylaşmanıza olanak tanır. Ben DRY uzmanlaşmak ve ihlal etmek gerek görmüyorum.

Zend Görünüm Sorular

  1. Neden views "$ bu" kaynaklara erişmek için nasıl kullanabilirim? Ben ekstra yazarak için gerek görmüyorum. Diğer bazı çerçeveler) (görünüm değişkenler bir dizi ayıklamak ve görünümü içinde küresel fonksiyonları veya autoloading statik yardımcıları yükleme izin: myHelper :: birYöntem ();

  2. Neden görünümü yardımcıları sadece sınıfta başına bir fonksiyon izin veririm? Bu sınıflar ve ilgili bakım bir çok ile sonuçlanır. Daha önce de belirttiğimiz gibi yöntemlerin herhangi bir sayı ile statik sınıflar tercih ederim.

2 Cevap

Erken aşamalarında, 0.3 veya 0.4 sanırım bu yana ben, büyük bir intranet sitesinde Zend Framework kullanarak yaşıyorum ve ben ilgili sorularınızı kararların en izledi. Ben onları biraz anlatmaya çalışacağım:

  1. Çoğu durumda modülleri kullanmanız gerekmez. Sen IndexController veya HelpController onlara isim, sizin application/default dizindeki tüm denetleyicileri bırakın ve bitirdiniz, sadece erişim http://www.domain.com/ veya http://www.domain.com/help.

    Proje başladığında büyümeye giderseniz {[(2) onları acessing, modülün adının (dizin adı) Admin_IndexController veya Forum_PostController ile önek, istediğiniz gibi modülleri ekleyebilirsiniz }] (bu admin modülü, index denetleyicisi konum; değildir [(5)]} modülü / admin {kontrol olarak).

  2. Örneğin, applicatoin/modules adresinden modülleri dizini ayarlamak ve modülleri için bu dizine bakmak FrontController yapılandırabilirsiniz. Eğer yeni bir dizin oluşturun ve orada görünümü / denetleyicileri koymak addModuleDictory zaman kullanarak, otomatik keşfedilen dağıtıcısı tarafından sensin. Here bir örnektir.

  3. Ben gördüğünüz gibi onlar açıkça farklı amaçlara hizmet. ViewHelpers OTOH ActionHelpers bir örnek olarak, başka bir eyleme yönlendirmek için izin, sevk işlemi ile etkileşime menü oluşturma, kenar çubuğu vb abstracting biçimlendirme oluşturmak ve doğrudan görünümünde diğer eylemleri işlemek için kullanılır.

İzlenme

  1. Uzaklaştırmak ben de biraz garip hissettim, ama ben alıştım. Ben ana nedeni ad kirletme olmadığını düşünüyorum, ama bu yanlış olabilir. I extract() kullanımının çok düşkün değilim, ama bu sadece benim kişisel tercihi arada.

  2. Autoloading: Bu dosya başına birden fazla denetleyici için izin değil ana nedeni. Eğer kullandığınız zaman $this->someViewHelper() yatan motoru eklentisi yollarında *_SomeViewHelper_Helper adında bir sınıf arar. Diğer nedeni statik sınıflar karşı birim test etmek çok zor olmasıdır. Bir örnek sınıf değil, bir Singleton olarak FrontController yeniden yazmak için bir öneri bile var.

Eğer ikinci fıkrası ve geliştiricileri ve topluluk bu konuda bilir söylemek aşırı karmaşık bölümü hakkında haklısın. O sadece tüm requiriments ve varyasyonları karşılamak için bu şekilde olmak zorunda.

Sonunda ben ZF bize ne istediğinizi yapmak için özgürlük veren, çok sağlam bir çerçeve olduğunu düşünüyorum.

Ben size soru temizleyerek yardımcı olabilir umuyoruz.

Ben bu tüm cevapları bilmiyorum ama ben bir bıçak olacak ve umarım birisi boşlukları doldurmak böylece onlar ilginç sorular konum.

Genel

  1. Varsayılan modülünde Sınıflar değil modül adı, örneğin ile öneki Admin_IndexController ve / admin / kontrolörleri ikamet ediyorum. Ben (kütüphane sınıfları vs) ayrılması ve tutarsız adlandırma için nedeni iç içe geçmiş bir klasör yapısı içinde onlara sahip çok az faydası olacağını düşünüyorum. Kontrolörler bu yüzden şahsen, mantıklı düşünüyorum uygulanması parçasıdır. Klasörleri geçme, ancak biraz yorucu olsun.

  2. Sen memuru değiştirmek veya dizinleri taramak ve bunları eklemek için bir eklenti yazabilirsiniz.

  3. There is definitely overlap here - the URL helpers are a good example of this. Genelly a view helper generates markup so I think there's a big enough distinction.

Görünüm

  1. Ben tam nedenini bilmiyorum ama ben diğer yardımcıları ve görünümü işlevselliği birlikte daha kolay çalışmasını sağlar tahmin ediyorum. Eğer doküman türü ayarlamak için doctype yardımcısı kullandım Örneğin, form elemanı yardımcıları uygun olarak XHTML veya HTML üretir.

  2. It definitely results in a lot of classes, but I'm not sure about maintenance. I've not run in to any problems. I can see the use in static classes, but remember that Zend_Görünüm won't stop you using them. If you have your static classes in your include path (and use Zend_Loader or similar), you can use them instead of or in addition to Görünüm Helpers.