Perché Zend Framework è così complicato?


42

Sono uno sviluppatore web e ho esperienza nello sviluppo di diverse applicazioni web in PHP. Ho un'idea di sviluppo di un prodotto per me stesso e ho deciso di utilizzare un framework basato su MVC perché mi piace molto l'idea di MVC e come si può facilmente gestire e modificare l'applicazione senza alcuna difficoltà.

Ho scelto Zend Framework e mi sembra più difficile che imparare un nuovo linguaggio di programmazione. Ci sono così tante cose che vanno alla volta anche per eseguire una piccola applicazione.

Allo stesso modo l'idea del routing è molto complessa in quanto è nuova per un programmatore principale. So che i ragazzi qui leggono migliaia di domande come quelle che sto ponendo, ma non sto cercando di imparare Zend Framework dall'oggi al domani. Sono disposto a dedicare tutto il tempo necessario ma fino ad ora non ha senso per me. Ci sono migliaia di classi nella libreria Zend, ma come fa un noob a sapere dove usare una classe specifica e come usarla? Sto ancora trovando molto difficile capire il bootstrap di Zend Framework e la sua mappatura. Ho letto il manuale, lo seguo e le cose iniziano a funzionare ma non capisco esattamente come stanno realmente accadendo.

Inoltre non ho ancora idea di come modelli, viste e controller collaborino e come pianificare un'applicazione in Zend Framework. Quando si tratta di php di base, ho esattamente in mente l'idea che cosa fare e che tradurli facilmente in codice, ma in Zend Framework non so come tradurre la mia idea.


10
Se non conosci MVC, implementa tu stesso uno scaffold MVC prima di utilizzarne uno completo: non sono utili per l'apprendimento.
treecoder il

2
@greengit è quello che ho fatto!
Kyle Hodgson il

Zend Framework non è difficile, richiede un po 'di tempo per imparare, a causa della cattiva documentazione, ma posso assicurarti che si tratta di un framework molto potente. Abbiamo sviluppato software per grandi aziende su ZF2 e la flessibilità di configurazione è straordinaria in ZF.
albanx,

Risposte:


38

Zend Framework è difficile. Non è stato costruito come un framework entry level, si presume che la conoscenza dei concetti coinvolti 1 . Detto questo, il primo requisito per Zend Framework 2.0 è renderlo un po 'più semplice:

Facilita la curva di apprendimento

Alla fine del 2009, abbiamo effettuato un sondaggio tra gli utenti del framework per determinare cosa usano, quali ambienti usano e quali sono le loro esigenze. Il problema principale, nessuno escluso, era la difficoltà di apprendere il framework. Alcuni di questi problemi includono:

  • Difficoltà nella "prima ora" con il quadro.
  • Incertezza sui "passi successivi" dopo l'avvio rapido.
  • API incoerenti nel codice sorgente stesso. Un componente può utilizzare "plug-in", un altro "helper" e un altro "filtro".
  • Incertezza su dove esistano i punti di estensione e su come programmarli.
  • Confusione sul fatto che possano usare Zend Framework solo come stack MVC o come singoli componenti.

Quindi non sei solo tu, è difficile per tutti - leggi l'intera pagina wiki, ci sono alcune cose che sono identificate come inutilmente complesse. Ma anche se il requisito di cui sopra è soddisfatto, non diventerà comunque un framework entry level, il che significa che non è un framework su cui dovresti imparare, ma che dovresti usare quando hai effettivamente compreso i concetti coinvolti.

Dato che stai ancora imparando, sarebbe molto più prezioso costruire la tua architettura MVC. Di Rasmus Lerdorf famigerato 2 " Il no-framework framework PHP MVC " post del blog fornisce un esempio molto semplice e pulita di MVC attraverso PHP procedurale, senza alcun quadro o altra libreria di terze parti coinvolte.

Ma se vuoi davvero imparare con un framework, dovresti considerare un micro framework invece di uno completo. Slim ha una base di codice molto piccola, pulita e accuratamente testata e dovrebbe essere ideale per l'apprendimento. Non ho giocato con nessun altro micro framework, dovresti fare le tue ricerche e decidere quale è meglio per te.

E per un'introduzione veloce e sporca all'instradamento, vedi la mia risposta a questa domanda . Non è un concetto molto difficile da capire, ma Zend Framework lo fa sembrare molto più di quello che è in realtà .

1 La migliore descrizione che ho letto per ZF è che è un framework per la creazione di framework , non un framework per applicazioni. È pura potenza e un elenco estremo di funzionalità non è adatto a siti Web di piccole e medie dimensioni. Sfortunatamente non riesco davvero a trovare dove l'ho letto.

2 Leggi la dichiarazione di non responsabilità nella parte superiore del post del blog.


Aggiornamento, ispirato al commento di @ Karpie:

Un framework non dovrebbe essere difficile, il punto centrale di un framework è quello di rendere le cose più facili. È possibile che anche con una solida comprensione dei concetti coinvolti, ZF non sia adatto a te.

Ci sono molti fattori soggettivi coinvolti nella scelta di un framework e, a meno che ogni altro framework manchi di funzionalità di cui hai assolutamente bisogno - e non puoi scrivere da solo, dovresti evitare ZF e usare un framework che ti sembra più naturale.

Se conosci i concetti, il framework non dovrebbe interferire.


3
Anche con la conoscenza dei concetti, è dannatamente difficile entrare e, ad essere sincero, non penso che valga la pena. La documentazione è spesso sbagliata, esempi sul web dopo di solito non aggiornati, il canale di supporto IRC è generalmente morto e da quello che ho visto non c'è altro posto dove ottenere supporto.
sevenseacat,

@Karpie Non lo trovo così difficile, a dire il vero. Ma è un po 'idiomatico, quindi sicuramente si adatta ad alcuni sviluppatori meglio di altri. Ad esempio, trovo più facile da capire di CodeIgniter, ma è solo per via del mio processo personale: preferisco leggere il codice piuttosto che la documentazione, e il codice di CI è così pieno di merda, la mia mente si spegne. Ma per la maggior parte degli sviluppatori CI è molto più facile da imparare rispetto a ZF, e non tutti concordano sul fatto che il codice di CI sia pieno di schifezze. L'importante è che un framework non dovrebbe essere difficile da usare, se è che ce ne sono sempre altri là fuori.
yannis,

Trovo che Zend Framework 1 sia relativamente facile da comprendere. Ma hai detto che l'idea alla base di ZF2 era quella di renderlo più semplice , penso che sia molto più complesso che mai.
Comprato il

Tutto in ZF2 è eccessivamente complicato. Sarebbe OK presentare il "framework" di Zend come una raccolta di moduli / librerie. Manca il quadro reale. Non esiste un livello modello, quindi devi implementare il tuo, che di solito è un casino o usare Doctrine, che richiede una certa integrazione. Per scrivere alcuni test unitari devi dedicare una quantità ridicola di tempo a decifrare il manuale e scrivere (o cercare di trovare online) del codice solo per avviare i test. Sebbene possa essere costruito attorno a concetti solidi, la loro interpretazione di tali concetti è terribile.
Vladko,

11

Non mi è piaciuta la mancanza di rilevabilità quando ho iniziato a utilizzare Zend Framework, troppe classi si basano su array e devi cercare quali chiavi puoi / devi definire.

Non c'è nulla di sbagliato nell'avere metodi chiari o params nominati, sarebbe molto utile aiutare con la rilevabilità.

Il framework Yii è anche peggio con questo genere di cose.


3
+1 La mia ragione significativa per non considerare seriamente l'assorbimento di ZF / ZF2 deve essere le brutte, auto complete / hinting e inteli-sense che schivano le configurazioni basate su array nidificate. Infrange la mia antipatia personale per l'uso eccessivo di array in un mondo OO.
Gavin Howden,

1
Proprio anche la mia opinione.
Daniel

Non trovo Yii 1 troppo difficile. Forse è per me. : P
Eugine Joseph,

5

Alcuni problemi con ZF, che rendono noioso (e difficile per i principianti) lavorare con:

ORM non incluso . Si potrebbe pensare che questo dovrebbe essere molto alla base del moderno framework MVC, tuttavia ZF viene fornito solo Zend_Db_Table, che è ridicolmente di basso livello. Puoi usare Doctrine, ma poi sei da solo, non è in alcun modo integrato con ZF.

Router URL illeggibili e gonfiati . Ad esempio, sono necessarie 9 righe di codice per definire il routing più semplice:

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

Data la quantità di domande relative a questo è tutt'altro che semplice per la maggior parte delle persone. Inoltre, non posso farne a meno e confrontarlo con Django, dove sarebbe l'equivalente di sopra

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

Zend_Aclè un modo complicato per la maggior parte dei casi d'uso. Normalmente avresti l'autenticazione per identificare l'utente. E un'opzione per limitare facilmente l'accesso ad alcuni controller solo agli utenti autenticati. Per molti casi utente è sufficiente. Per casi più complicati, spetterebbe alla logica aziendale nel controller determinare se l'utente dispone delle autorizzazioni per eseguire determinate azioni. In ZF non hai la possibilità di limitare facilmente l'accesso solo agli utenti autenticati, il modo standard è utilizzare ACL e il sistema di ruoli, indipendentemente da quanto siano semplici le tue esigenze.

Directory gonfia e layout dei file . La struttura di directory consigliata è simile alla seguente:

<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 è come un mucchio di librerie indipendenti che insieme funzionano come un framework. È molto difficile sviluppare qualcosa allo stesso tempo disaccoppiato e "facile da usare". Per "facile da usare" intendo fare cose complesse con poche righe di codice.

Quindi, iniziare con Zend è più difficile di altri framework, come CakePHP. Ma è anche più facile estendere e personalizzare l'applicazione senza codici sporchi. Zend segue anche standard e schemi di progettazione in tutto il suo codice, quindi una volta letto il codice del framework, puoi indovinare cosa sta succedendo.

Quando dici di non avere idea di come modelli, viste e controller funzionino insieme, per favore, non dare la colpa al framework. Implementa MVC come qualsiasi altro framework, tranne che separa il modello dalla struttura del database, che in molti framework sono implementati nella stessa classe. Quindi dovrai affrontare molte classi come Zend_Db_Table, Zend_Db_Table_Row, Zend_Db_Table_Rowset, ecc ...

Ecco perché penso che Zend Framework sia più complicato, perché è molto disaccoppiato e puoi usare le sue classi in altri progetti che non usano ZF.


3

Zend Framework richiede una solida base in OOP e Pattern di progettazione. Dalla mia esperienza, trovo solo programmatori Java-JEE-Struts-Spring esperti che acquisiscono facilmente familiarità con Zend Framework. Lo sviluppatore medio di PHP ha difficoltà a digerire i concetti e l'architettura dietro Zend Framework. Ma vedi ehi! Zend Framework viene dalla società "Zend" che crea PHP al primo posto. Quindi ha bisogno di un pensiero forse se non rispetto!


1
Rasmus Lerdorf ha creato php, zend è un grande sostenitore di php. Da quello che ricordo.
Sarmen B.

Non posso essere d'accordo. Sono uno sviluppatore Java. Non solo ho trovato facilmente la mia strada in ZF, ma l'ho preferito ad altri framework.
jkushner,

-2

Credo che zend sia solo per complicare le cose, MVC è logicamente solo una frode che funziona come un semplice PHP. ma lo stai sviluppando di fronte a MVC, come separare i file in diverse directory.

Ricorda che chi sta dicendo che Zend è molto sicuro e incapace di hackerare, è un grande sciocco. Zend può anche hackerare facilmente se non hai usato le protezioni per l'iniezione di Mysql. Vorrei suggerire di definire le proprie funzioni, quindi separare i file in directory diverse per renderlo simile come MVC, salvare le funzioni, le classi e altro materiale di base in una directory chiamata controller, quindi aggiungere le pagine Web in directory diverse dove è necessario per includere tutti quei file di funzioni che questa directory saprà come vista. posiziona i tuoi file javascript e css in diverse directory che saranno conosciute come modello.

Ricorda che, in questo mondo, molte persone lavorano sempre duramente per rendere le cose più complicate, perché sono esse stesse complicate da capire.

PHP è la lingua che hai imparato nel libro e dagli insegnanti. Zend non è altro che un framework per rendere le cose complicate per i tuoi clienti. quindi ogni volta che un cliente ha bisogno di modifiche, tornerà dai veri sviluppatori e quegli sviluppatori ti addebiteranno più soldi. Zend è protetto come se fosse una menzogna, un singolo errore come la semplice codifica PHP può causare la violazione del sito Web.


-6

Almeno il "quick start" deve essere più facile per rendere un framework amichevole ..... se preferisci qualcosa di più duro come una cosa migliore, direi "ZF è il miglior framework PHP", altrimenti NO. Ho scaricato ZF-2 e l'ho provato (onestamente sono un principiante di ZF). La cosa triste è che non ho ancora trovato una solida "guida rapida" con un semplice Project Skeleton su Internet. Tutto quello che sto cercando è un modo semplice per includere file di libreria e creare una cartella di progetto con funzionalità MVC. Ho usato Codeigniter, Cake php, Yii ma l'ho trovato piuttosto ostile. Sì, lo so che Zend aggiorna PHP, ma ciò non significa che sia il miglior framework o quello che dirai.


continua a non gradire .... LOL
Ram
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.