Zend Framework neden bu kadar karmaşık?


42

Web geliştiricisiyim ve PHP'de birkaç web uygulaması geliştirme deneyimim var. Kendim için bir ürün geliştirme fikrime sahibim ve MVC tabanlı bir çerçeve kullanmaya karar verdim çünkü MVC fikrini gerçekten çok seviyorum ve birinin uygulamayı zorlukla kolayca nasıl yönetebileceğini ve değiştirebileceğini çok seviyorum.

Zend Framework'ü seçtim ve yeni bir programlama dili öğrenmekten daha zor görünüyor. Küçük bir uygulamayı çalıştırmak için bir kerede çok şey gidiyor.

Benzer şekilde, yönlendirme fikri, bir çekirdek programcı için yeni olduğu için çok karmaşıktır. Buradaki çocukların sorduğum gibi binlerce soru okuduğunu biliyorum ama bir gecede Zend Framework'ü öğrenmek istemiyorum. İhtiyacı olduğu kadar zaman vermeye istekliyim ama şu ana kadar bana hiç bir şey ifade etmiyor. Zend kütüphanesinde binlerce sınıf var, ancak bir noob belirli bir sınıfı nasıl kullanacağını ve nasıl kullanacağını nasıl bilebilir? Zend Framework’ün önyüklemesini ve haritalandırmayı hala anlamakta güçlük çekiyorum. Kılavuzu okudum, takip ettim ve işler çalışmaya başladı ama tam olarak nasıl olduklarını tam olarak anlamadım.

Ayrıca, modellerin, görüşlerin ve denetleyicilerin birlikte nasıl çalıştıkları ve Zend Framework'te bir uygulamanın nasıl planlanacağı hakkında hiçbir fikrim yok. Temel php söz konusu olduğunda, aklımda ne yapacağımı ve kodları kolayca çevirmeyi düşündüğümde fikrim var ama Zend Framework'te fikrimi nasıl çevireceğimi bilmiyorum.


10
MVC'de yeniyseniz , tamamen gelişmiş olanlardan herhangi birini kullanmadan önce bir MVC iskelesi uygulayın - öğrenme için iyi değillerdir.
treecoder

2
@greengit Ben de öyle yaptım!
Kyle Hodgson

Zend Framework zor değil, kötü dokümantasyon nedeniyle öğrenmek biraz zaman alıyor, ama bunun çok güçlü bir çerçeve olduğunu temin ederim. ZF2'de büyük kurumsal yazılımlar oluşturduk ve yapılandırma konusundaki esneklik ZF'de olağanüstü.
albanx

Yanıtlar:


38

Zend Framework zor. Giriş seviyesi çerçevesi olarak inşa edilmedi, ilgili kavramların bilgisi 1 olarak kabul edildi . Bununla birlikte, Zend Framework 2.0 için ilk gereksinimin biraz daha kolay hale getirilmesi gerektiği belirtildi:

Öğrenme eğrisini kolaylaştırın

2009'un sonlarında ne kullandıklarını, hangi ortamları kullandıklarını ve ihtiyaçlarının neler olduğunu belirlemek için bir çerçeve kullanıcıları anketi yaptık. En önemlisi, hiçbiri yasak, çerçeveyi öğrenmenin zorluğuydu. Bu sorunlardan bazıları şunlardır:

  • Çerçeve ile "ilk saat" Zorluk.
  • Hızlı başlangıçtan sonraki "sonraki adımlar" konusundaki belirsizlik.
  • Kaynak kodun kendisinde tutarsız olan API'ler. Bir bileşen "eklentiler", "başka" yardımcılar "ve yine başka" filtreler "kullanabilir.
  • Uzatma noktalarının nerede olduğu ve onlar için nasıl programlanacağı konusunda belirsizlik.
  • Zend Framework'ü yalnızca MVC yığını olarak mı yoksa tek tek bileşenler olarak mı kullanabilecekleri üzerine kafa karışıklığı.

Bu yüzden sadece siz değil, herkes için zor - tüm wiki sayfasını okuyun, gereksiz yere karmaşık olarak tanımlanan birkaç şey var. Ancak, yukarıdaki şart yerine getirilse bile, yine de giriş seviyesi bir çerçeve olmayacaktır, yani öğrenmeniz gereken bir çerçeve değil, ilgili kavramları gerçekten anladığınızda kullanmanız gereken bir çerçeve olduğu anlamına gelir.

Hala öğrendiğiniz için, kendi MVC mimarinizi inşa etmek çok daha değerli olacaktır. Rasmus Lerdorf'un ünlü 2 " Çerçevesiz PHP MVC çerçevesi " blog yazısı, herhangi bir çerçeve veya başka bir üçüncü parti kütüphanesi olmadan, prosedürel PHP aracılığıyla MVC'ye çok basit ve temiz bir örnek verir.

Ancak, gerçekten bir çerçeveyle öğrenmek istiyorsanız, tamamen gelişmiş bir yerine mikro bir çerçeveyi düşünmelisiniz . Slim çok küçük, temiz ve tamamen test edilmiş bir kod tabanına sahiptir ve öğrenmek için ideal olmalıdır. Başka hiçbir mikro çerçeveyle oynamamıştım, kendi araştırmanızı yapmalı ve hangisinin sizin için daha iyi olduğuna karar vermelisiniz.

Ve yönlendirme için hızlı ve kirli tanıtımı için, bkz benim cevap için bu soruya . Kavraması zor bir kavram değil, ama Zend Framework aslında olduğundan çok daha fazla görünmesini sağlıyor .

1 ZF için okuduğum en iyi açıklama , uygulama çerçevesi değil, çerçeve oluşturma çerçevesidir. Bu ham güç ve aşırı özellik listesi küçük ve orta büyüklükteki web siteleri için uygun değildir. Maalesef onu nerede okuduğumu gerçekten bulamıyorum.

2 Blog postasının en üstündeki yasal uyarıyı okuyun.


Güncelleme, @ Karpie'nin yorumundan ilham aldı:

Bir çerçevenin zor olması gerekmiyor, çerçevenin tüm amacı işleri kolaylaştırmak. İlgili kavramları kesin olarak kavramanıza rağmen, ZF'nin sizin için uygun olmaması mümkündür.

Bir çerçeve seçerken dahil edilen birçok öznel faktör vardır ve diğer tüm çerçeveler kesinlikle ihtiyaç duyduğunuz işlevsellikten yoksun - ve kendi başınıza yazamazsanız, ZF'den kaçınmalı ve sizin için daha doğal olan bir çerçeve kullanmalısınız.

Kavramları biliyorsanız, çerçeve bu şekilde olmamalıdır.


3
Kavramların bilgisiyle bile, içine girmek çok zor ve dürüst olmak gerekirse, çabaya değeceğini sanmıyorum. Belgeler genellikle yanlış, genellikle güncel olmayan web örnekleri, IRC destek kanalı genellikle öldü ve gördüklerimden destek almak için başka bir yer yok.
sevenseacat

@Karpie Dürüst olmak gerekirse, o kadar zor bulmuyorum. Ama bir tür deyimsel, bu yüzden kesinlikle bazı geliştiricilere diğerlerinden daha iyi uyuyor. Örneğin, CodeIgniter’dan daha kolay anlaşılır buluyorum ancak bu benim kişisel işlemimden kaynaklanıyor: Kodları dokümantasyondan daha çok okumayı tercih ediyorum ve CI'nin kodu çok fazla doluydu, aklım kapanıyor. Ancak çoğu geliştirici için CI, ZF'den öğrenmekten çok daha kolaydır ve herkes CI'nin kodunun berbat olduğunu kabul etmez. Önemli olan, bir çerçevenin, her zaman orada başkaları varsa, kullanımı zor olmaması gerektiğidir.
yannis,

Zend Framework 1'in kavraması nispeten kolay. Ama ZF2'nin arkasındaki fikrin bunu kolaylaştırmak olduğunu söyledin, daha önce olduğundan çok daha karmaşık olduğunu hissediyorum .
777,

ZF2'deki her şey aşırı karmaşık. Zend "framework" ü bir modül / kütüphane koleksiyonu olarak sunmak doğru olur. Gerçek çerçeve eksik. Model katmanı yok, bu yüzden ya kendi karmaşıklığınızı kendiniz uygulamak zorundasınız, ki bu bir karmaşa veya biraz entegrasyon gerektiren Doctrine kullanıyorsunuz. Bazı ünite testleri yazmak için, kılavuzunuzu deşifre etmek ve sadece testlerinizi başlatmak için bazı kodlar yazmak (veya çevrimiçi bulmaya çalışmak) için çok fazla zaman harcamanız gerekir. Ses kavramları etrafında inşa edilmiş olsa da, bu kavramları yorumlamaları korkunçtur.
vladko

11

Zend Framework'ü kullanmaya başladığımda keşfedilebilirlik eksikliği hoşuma gitmedi, çok fazla sınıf dizilere dayanıyor ve hangi anahtarları tanımlayabileceğinizi / tanımlamanız gerektiğini araştırmanız gerekiyor.

Açık bir şekilde belirlenmiş yöntemlere veya adlandırılmış paramlara sahip olmanın hiçbir yanlışlığı yoktur, keşfedilebilirliğe yardımcı olmak için uzun bir yol kat edecekti.

Yii çerçevesi bu tür şeylerle daha da kötüdür.


3
+1 ZF / ZF2'nin alımını ciddiye almamak konusundaki ciddi nedenim, çirkin, otomatik tamamlama / ipucu alma ve intel-sense dodging iç içe dizi tabanlı yapılandırmalar olmalıdır. Bir OO dünyasındaki dizilerin aşırı kullanılmasından hoşlanmam kişisel kişiselliğimi ihlal ediyor.
Gavin Howden

1
Kesinlikle benim düşüncem de.
Daniel

Yii 1'i çok zor bulmuyorum. Belki bu benim için. : P
Eugine Joseph,

5

ZF ile ilgili bazı problemler çalışmayı sinirlendirir (ve yeni başlayanlar için zorlaştırır):

ORM dahil değildir . Birisi bunun modern MVC çerçevesinin temeli olması gerektiğini düşünürken, ZF sadece Zend_Db_Tablesaçma derecede düşük seviyeli olan gelir . Doktrin'i kullanabilirsiniz, fakat sonra kendi başınızasınız, ZF ile hiçbir şekilde entegre değil.

Okunamayan, şişirilmiş URL yönlendiricileri . Örneğin, en basit yönlendirmeyi tanımlamak 9 satır kod alır:

$route = new Zend_Controller_Router_Route(
    'archive/:year',
    array(
        'controller' => 'archive',
        'action'     => 'show'
    ),
    array('year' => '\d+')
);
$router->addRoute('archive', $route);

Bununla ilgili soru miktarı göz önüne alındığında , çoğu insan için basit ama bir şey değildir. Ayrıca, ona yardım edemem ve onu Django ile kıyaslayamam.

url(r'^archive/(?P<year>\d+)/$', 'archive.show')

Zend_Aclkullanım durumlarının çoğu için karmaşık bir yoldur. Normalde kullanıcıyı tanımlamak için kimlik doğrulamanız gerekir. Bazı denetleyicilere erişimi yalnızca kimliği doğrulanmış kullanıcılara kolayca sınırlama seçeneği. Birçok kullanıcı durumu için bu yeterli. Daha karmaşık bir durumda, kullanıcının belirli eylemleri gerçekleştirme izninin olup olmadığını belirlemek denetleyicideki iş mantığına bağlı olacaktır. ZF'de, yalnızca kimliği doğrulanmış kullanıcılara erişimi kolayca sınırlama seçeneğiniz yoktur, standart yöntem, ihtiyacınızın ne kadar basit olduğuna bakılmaksızın ACL ve rol sistemini kullanmaktır.

Şişirilmiş dizin ve dosya düzeni . Önerilen dizin yapısı şuna benzer:

<project name>/
    application/
        configs/
            application.ini
        controllers/
            helpers/
        forms/
        layouts/
            filters/
            helpers/
            scripts/
        models/
        modules/
        services/
        views/
            filters/
            helpers/
            scripts/
        Bootstrap.php
    data/
        cache/
        indexes/
        locales/
        logs/
        sessions/
        uploads/
    docs/
    library/
    public/
        css/
        images/
        js/
        .htaccess
        index.php
    scripts/
        jobs/
        build/
    temp/
    tests/

4

Zend Framework, birlikte bir çerçeve gibi çalışan bir grup bağımsız kitaplık gibidir. Aynı anda ayrıştırılmış ve “kullanımı kolay” bir şey geliştirmek çok zordur. "Kullanımı kolay" için birkaç kod satırıyla karmaşık şeyler yapmaktan bahsediyorum.

Bu yüzden, Zend ile başlamak CakePHP gibi diğer çerçevelerden daha zor. Ancak, uygulamanızın kirli kodlar olmadan daha kolay bir şekilde genişletilip özelleştirilebildiğini de biliyorum. Zend ayrıca tüm kodları boyunca standartları ve tasarım modellerini takip eder, bu nedenle, çerçeve kodunu okuduğunuzda, neler olduğunu tahmin edebilirsiniz.

Modellerin, görünümlerin ve denetleyicilerin birlikte nasıl çalıştığı hakkında hiçbir fikriniz olmadığını söylerken, lütfen çerçeveyi suçlamayın. MVC'yi, diğer birçok çerçevede olduğu gibi uygular; Modeli, birçok çerçevede aynı sınıfta uygulanan Veritabanı yapısından ayırması dışında. Böylece Zend_Db_Table, Zend_Db_Table_Row, Zend_Db_Table_Rowset, vb. Gibi bir çok sınıfla yüzleşeceksiniz .

Bu yüzden Zend Framework'ün daha karmaşık olduğunu düşünüyorum, çünkü çok ayrılmıştır ve sınıflarını ZF kullanmayan başka projelerde kullanabilirsiniz.


3

Zend Framework, OOP ve Tasarım Desenlerinde bazı sağlam topraklamalar gerektirir. Tecrübelerime göre, yalnızca Zend Framework ile kolayca aşina olan deneyimli Java-JEE-Struts-Spring Programcılarını buldum. Ortalama PHP Developer, Zend Framework'ün arkasındaki kavramları ve Mimariyi hazmetmeyi zorlaştırıyor. Ama hey gör! Zend Framework, ilk etapta PHP yaratan 'Zend' şirketinden geliyor. Bu yüzden belki saygı olmasa da biraz düşünmeye ihtiyacı var!


1
Rasmus Lerdorf php'yi yarattı, zend php'nin yüksek destekçisi. Hatırladığım şeyden.
Sarmen B.

Orada aynı fikirde değilim. Ben bir Java geliştiricisiyim. Kolayca ZF'ye girmenin yolunu bulmakla kalmayıp, diğer çerçevelere tercih ettim.
jkushner

-2

Zend'in işleri karmaşıklaştırmak olduğuna inanıyorum, MVC mantıksal olarak basit bir PHP gibi çalışan bir sahtekarlıktır. ancak, farklı dizinlerdeki dosyaları ayırmak gibi MVC'nin önünde geliştiriyorsunuz.

Zend'in çok güvenli ve hack edemediğini söyleyenlerin büyük bir aptal olduğunu unutmayın. Zend, Mysql enjeksiyon koruması kullanmamışsanız kolayca kesebilir. Kendi işlevlerinizi tanımlamanızı önermek istiyorum, ardından MVC'nin işlevlerinizi, sınıflarınızı ve diğer çekirdek malzemeyi denetleyici adı verilen bir dizine kaydetmesini sağlamak için dosyalarınızı farklı dizinlere ayırın ve web sayfalarınızı istediğiniz dizine ekleyin tüm bu işlev dosyalarını dahil etmek için bu dizinin görünüm olarak bileceği. javascript ve css dosyalarınızı model olarak bilinen farklı dizinlere yerleştirin.

Unutmayın, bu dünyada çoğu insan bir şeyi daha karmaşık hale getirmek için her zaman çok çalışır, çünkü onlar kendilerini anlamak için karmaşıktırlar.

PHP, kitapta ve öğretmenlerden öğrendiğiniz dildir. Zend, müşterileriniz için işleri karmaşık hale getirmek için sadece bir çerçeve değildir. Bu nedenle, ne zaman müşterinin herhangi bir modifikasyona ihtiyacı olursa, gerçek geliştiricilere geri döner ve bu geliştiriciler sizden daha fazla para talep eder. Zend tüm yalanını korumalıdır, düz php kodlaması gibi tek bir hata web sitesinin kırılabilir olmasına neden olabilir.


-6

En azından "hızlı başlangıç" işinin bir çerçeveyi kolaylaştırmak için daha kolay olması gerekir. Eğer daha iyi bir şey olarak daha sert bir şey tercih ederseniz "ZF en iyi PHP çerçevesidir" derdim, aksi halde DEĞİL. ZF-2'yi indirdim ve denedim (dürüst olmak gerekirse, ZF'ye yeniyim). Üzücü olan şey, hala internette basit bir Proje İskeletiyle sağlam bir "hızlı başlangıç ​​kılavuzu" bulamadım. Tek istediğim kütüphane dosyalarını dahil etmenin ve MVC özelliklerine sahip bir proje klasörü oluşturmanın basit yoludur. Codeigniter, Cake php, Yii kullandım ama oldukça düşmanca buldum. Evet, Zend'in PHP'yi yükselttiğini biliyorum, ancak bunun en iyi çerçeve veya ne söyleyeceğiniz anlamına gelmiyor.


.... LOL
Ram
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.