it-swarm.dev

Warum ist Zend Framework so kompliziert?

Ich bin Webentwickler und habe Erfahrung in der Entwicklung mehrerer Webanwendungen in PHP. Ich habe eine Idee, ein Produkt für mich selbst zu entwickeln, und habe mich für ein MVC-basiertes Framework entschieden, weil mir die Idee von MVC sehr gefällt und wie man die Anwendung problemlos verwalten und ändern kann.

Ich habe mich für Zend Framework entschieden und es scheint schwieriger zu sein, als eine neue Programmiersprache zu lernen. Es gibt so viele Dinge gleichzeitig, sogar um eine kleine Anwendung auszuführen.

Ebenso ist die Idee des Routings sehr komplex, da sie für einen Kernprogrammierer neu ist. Ich weiß, dass die Leute hier Tausende solcher Fragen lesen, wie eine, die ich stelle, aber ich möchte Zend Framework nicht über Nacht lernen. Ich bin bereit, so viel Zeit zu geben, wie es braucht, aber bis jetzt macht es für mich keinen Sinn. Es gibt Tausende von Klassen in der Zend-Bibliothek, aber wie würde ein Noob wissen, wo und wie eine bestimmte Klasse verwendet werden soll? Ich finde es immer noch sehr schwierig, das bootstrap von Zend Framework und seine Zuordnung) zu verstehen. Ich lese das Handbuch, folge ihm und die Dinge beginnen zu funktionieren, aber ich weiß wirklich nicht genau, wie sie tatsächlich ablaufen .

Ich habe auch noch keine Ahnung, wie Modelle, Ansichten und Controller zusammenarbeiten und wie eine Anwendung in Zend Framework geplant wird. Wenn es um Core PHP geht, habe ich genau die Idee im Kopf, was zu tun ist, und kann sie dann einfach in Code übersetzen, aber in Zend Framework weiß ich nicht, wie ich meine Idee übersetzen soll.

42
Umair Abid

Zend Framework ist schwer. Es wurde nicht als Einstiegs-Framework erstellt, es wird vorausgesetzt, dass die beteiligten Konzepte bekannt sind1. Das erste Voraussetzung für Zend Framework 2. soll es ein bisschen einfacher machen:

Erleichtern Sie die Lernkurve

Ende 2009 haben wir eine Umfrage unter Framework-Benutzern durchgeführt, um festzustellen, was sie verwenden, welche Umgebungen sie verwenden und welche Anforderungen sie haben. Das Hauptproblem, abgesehen von keinem, war die Schwierigkeit, das Framework zu lernen. Einige dieser Probleme umfassen:

  • Schwierigkeiten in der "ersten Stunde" mit dem Framework.
  • Unsicherheit über die "nächsten Schritte" nach dem Schnellstart.
  • Inkonsistente APIs im Quellcode. Eine Komponente kann "Plugins", andere "Helfer" und noch weitere "Filter" verwenden.
  • Unsicherheit darüber, wo Erweiterungspunkte vorhanden sind und wie diese programmiert werden sollen.
  • Verwirrung darüber, ob sie Zend Framework nur als MVC-Stack oder als einzelne Komponenten verwenden können.

Es ist also nicht nur Sie, es ist schwer für alle - lesen Sie die gesamte Wiki-Seite, es gibt einige Dinge, die als unnötig komplex identifiziert werden. Aber selbst wenn die oben genannte Anforderung erfüllt ist, wird es kein Einstiegs-Framework, was bedeutet, dass es kein Framework ist, auf dem Sie lernen sollten, sondern eines, das Sie verwenden sollten, wenn Sie die beteiligten Konzepte tatsächlich verstanden haben.

Da Sie noch lernen, wäre es viel wertvoller, eine eigene MVC-Architektur zu erstellen. Rasmus Lerdorfs berüchtigt2 " Das No-Framework PHP MVC-Framework " Blog-Beitrag bietet ein sehr einfaches und sauberes Beispiel für MVC durch prozedurales PHP, ohne dass ein Framework oder eine andere Bibliothek eines Drittanbieters beteiligt ist.

Wenn Sie jedoch wirklich mit einem Framework lernen möchten, sollten Sie ein Micro Framework anstelle eines vollständigen Frameworks in Betracht ziehen. Slim hat eine sehr kleine, saubere und gründlich getestete Codebasis und sollte ideal zum Lernen sein. Ich habe mit keinem anderen Mikro-Framework herumgespielt. Sie sollten selbst recherchieren und entscheiden, welches für Sie besser ist.

Und für eine schnelle und schmutzige Einführung in das Routing siehe meine Antwort bis diese Frage . Es ist kein sehr schwer zu fassendes Konzept, aber Zend Framework lässt es so aussehen viel mehr als es tatsächlich ist .

1 Die beste Beschreibung, die ich für ZF gelesen habe, ist, dass es sich um ein Framework zum Erstellen von Frameworks handelt, nicht um ein Anwendungsframework. Die rohe Leistung und die extreme Liste an Funktionen eignen sich nicht für kleine bis mittlere Websites. Kann leider nicht wirklich finden, wo ich das gelesen habe.

2 Lesen Sie den Haftungsausschluss oben im Blog-Beitrag.


Update, inspiriert von @ Karpies Kommentar:

Ein Framework soll nicht schwer sein, der Sinn eines Frameworks besteht darin, die Dinge einfacher zu machen. Es ist möglich, dass ZF trotz eines guten Verständnisses der Konzepte nicht zu Ihnen passt.

Bei der Auswahl eines Frameworks sind viele subjektive Faktoren zu berücksichtigen. Wenn nicht jedem anderen Framework die Funktionalität fehlt, die Sie unbedingt benötigen - und nicht selbst schreiben können, sollten Sie ZF vermeiden und ein Framework verwenden, das sich für Sie natürlicher anfühlt.

Wenn Sie die Konzepte kennen, sollte das Framework nicht im Weg stehen.

38
yannis

Ich mochte den Mangel an Erkennbarkeit nicht, als ich anfing, das Zend Framework zu verwenden. Zu viele Klassen basieren auf Arrays und Sie müssen nachschlagen, welche Schlüssel Sie definieren können/müssen.

Es ist überhaupt nichts Falsches daran, klar festgelegte Methoden oder benannte Parameter zu haben. Es würde einen großen Beitrag zur Auffindbarkeit leisten.

Das Yii Framework) ist mit solchen Dingen noch schlimmer.

11
DBlackborough

Einige Probleme mit ZF, die es ärgerlich (und für Anfänger schwierig) machen, damit zu arbeiten:

ORM nicht enthalten . Man würde denken, dass dies die Basis des modernen MVC-Frameworks sein sollte, aber ZF kommt nur mit Zend_Db_Table, was lächerlich niedrig ist. Sie können Doctrine verwenden, aber dann sind Sie alleine, es ist in keiner Weise in ZF integriert.

Unlesbare, aufgeblähte URL-Router . Zum Beispiel werden 9 Codezeilen benötigt, um das einfachste Routing zu definieren:

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

Gegeben Menge an Fragen im Zusammenhang damit es ist alles andere als einfach für die meisten Menschen. Ich kann es auch nicht ändern und es mit Django vergleichen, wo das Äquivalent von oben wäre

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

Zend_Acl ist für die meisten Anwendungsfälle viel zu kompliziert. Normalerweise haben Sie eine Authentifizierung, um den Benutzer zu identifizieren. Und eine Option, um den Zugriff auf einige Controller einfach nur auf authentifizierte Benutzer zu beschränken. Für viele Anwender reicht das aus. Für einen komplizierteren Fall wäre es Sache der Geschäftslogik in der Steuerung, zu bestimmen, ob der Benutzer die Berechtigung hat, bestimmte Aktionen auszuführen. In ZF haben Sie nicht die Möglichkeit, den Zugriff einfach auf authentifizierte Benutzer zu beschränken. Die Standardmethode ist die Verwendung des ACL- und Rollensystems, unabhängig davon, wie einfach Ihre Anforderungen tatsächlich sind.

Aufgeblähtes Verzeichnis- und Dateilayout . Empfohlene Verzeichnisstruktur sieht folgendermaßen aus:

<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/
5
vartec

Zend Framework ist wie eine Reihe unabhängiger Bibliotheken, die zusammen wie ein Framework funktionieren. Es ist sehr schwer, etwas zu entwickeln, das gleichzeitig entkoppelt und "einfach zu bedienen" ist. Für "einfach zu bedienen" meine ich komplexe Dinge mit wenigen Codezeilen zu tun.

Es ist also schwieriger, mit Zend zu beginnen als mit anderen Frameworks wie CakePHP. Aber ich es ist auch einfacher, Ihre Anwendung ohne schmutzige Codes zu erweitern und anzupassen. Zend folgt außerdem Standards und Entwurfsmustern im gesamten Code. Sobald Sie den Framework-Code gelesen haben, können Sie erraten, was los ist.

Wenn Sie sagen, dass Sie keine Ahnung haben, wie Modelle, Ansichten und Controller zusammenarbeiten, geben Sie dem Framework bitte keine Schuld. Es implementiert MVC wie jedes andere Framework, außer dass es das Modell von der Datenbankstruktur trennt, die in vielen Frameworks in derselben Klasse implementiert ist. Du wirst also vielen Klassen wie Zend_Db_Table, Zend_Db_Table_Row, Zend_Db_Table_Rowset usw. gegenüberstehen.

Aus diesem Grund halte ich Zend Framework für komplizierter, da es sehr entkoppelt ist und Sie seine Klassen in anderen Projekten verwenden können, die ZF nicht verwenden.

4
gustavotkg

Zend Framework erfordert eine solide Grundlage in OOP und Design Patterns. Aus meiner Erfahrung heraus finde ich nur erfahrene Java-JEE-Struts-Spring-Programmierer, die sich leicht mit Zend Framework vertraut machen. Durchschnitt PHP Entwickler finden es schwierig, die Konzepte und die Architektur hinter Zend Framework zu verstehen. Aber siehe hey! Zend Framework stammt von der Firma 'Zend', die PHP an erster Stelle) erstellt es braucht vielleicht einige Überlegungen, wenn nicht Respekt!

3
Rohit