web-dev-qa-db-fra.com

Pourquoi Zend Framework est-il si compliqué?

Je suis développeur web et j'ai de l'expérience dans le développement de plusieurs applications web en PHP. J'ai une idée de développer un produit pour moi et j'ai décidé d'utiliser un framework basé sur MVC parce que j'aime vraiment l'idée de MVC et comment on peut facilement gérer et modifier l'application sans aucune difficulté.

J'ai choisi Zend Framework et cela semble plus difficile que d'apprendre un nouveau langage de programmation. Il y a tellement de choses qui se passent en même temps pour exécuter une petite application.

De même, l'idée de routage est très complexe car elle est nouvelle pour un programmeur principal. Je sais que les gars ici lisent des milliers de ces questions comme celle que je pose, mais je ne cherche pas à apprendre Zend Framework du jour au lendemain. Je suis prêt à donner autant de temps que nécessaire, mais jusqu'à présent, cela n'a aucun sens pour moi. Il y a des milliers de classes dans la bibliothèque Zend, mais comment un noob pourrait-il savoir où utiliser une classe spécifique et comment l'utiliser? Je trouve toujours très difficile de comprendre le bootstrap de Zend Framework et son mappage. J'ai lu le manuel, le suivre et les choses commencent à fonctionner mais je ne sais vraiment pas exactement comment elles se passent réellement .

Je ne sais pas non plus comment les modèles, les vues et les contrôleurs fonctionnent ensemble et comment planifier une application dans Zend Framework. En ce qui concerne le php de base, j'ai exactement l'idée de quoi faire et de les traduire facilement en code, mais dans Zend Framework, je ne sais pas comment traduire mon idée.

42
Umair Abid

Zend Framework est difficile. Il n'a pas été construit comme un cadre d'entrée de gamme, la connaissance des concepts impliqués est supposée1. Cela dit, le première exigence pour Zend Framework 2. est de le rendre un peu plus facile:

Facilitez la courbe d'apprentissage

Fin 2009, nous avons mené une enquête auprès des utilisateurs du framework pour déterminer ce qu'ils utilisent, quels environnements ils utilisent et quels sont leurs besoins. Le principal problème, sans exception, était la difficulté d'apprendre le cadre. Certains de ces problèmes incluent:

  • Difficulté dans la "première heure" avec le cadre.
  • Incertitude sur les "prochaines étapes" après le démarrage rapide.
  • API incohérentes dans le code source lui-même. Un composant peut utiliser des "plugins", un autre "helpers" et encore un autre "filtre".
  • Incertitude quant à l'emplacement des points d'extension et à la programmation de ces points.
  • Confusion quant à savoir s'ils peuvent utiliser Zend Framework uniquement en tant que pile MVC ou en tant que composants individuels.

Donc ce n'est pas seulement vous, c'est difficile pour tout le monde - lisez toute la page wiki, il y a pas mal de choses qui sont identifiées comme inutilement complexes. Mais même si l'exigence ci-dessus est remplie, cela ne deviendra pas un cadre d'entrée de gamme, ce qui signifie que ce n'est pas un cadre sur lequel vous devriez apprendre, mais un cadre que vous devriez utiliser lorsque vous avez réellement compris les concepts impliqués.

Puisque vous apprenez encore, il serait beaucoup plus utile de créer votre propre architecture MVC. de Rasmus Lerdorf notoire2 " Le no-framework PHP MVC framework " le billet de blog donne un exemple très simple et propre de MVC via PHP procédural, sans aucun framework ou autre bibliothèque tierce impliquée.

Mais si vous voulez vraiment apprendre avec un framework, vous devriez considérer un micro framework au lieu d'un véritable. Slim a une base de code très petite, propre et soigneusement testée et devrait être idéale pour l'apprentissage. Je n'ai pas joué avec un autre micro-framework, vous devriez faire vos propres recherches et décider lequel vous convient le mieux.

Et pour une introduction rapide et sale au routage, voir ma réponse à cette question . Ce n'est pas un concept très difficile à comprendre, mais Zend Framework le fait ressembler à beaucoup plus qu'il ne l'est réellement .

1 La meilleure description que j'ai lue pour ZF est que c'est un framework de construction de framework, pas un framework d'application. Sa puissance brute et sa liste de fonctionnalités extrêmes ne conviennent pas aux sites Web de petite à moyenne taille. Malheureusement, je ne trouve pas vraiment où j'ai lu ça.

2 Lisez l'avertissement en haut de l'article de blog.


Mise à jour, inspirée du commentaire de @ Karpie:

Un cadre n'est pas censé être difficile, tout l'intérêt d'un cadre est de faciliter les choses. Il est possible que même avec une solide compréhension des concepts impliqués, ZF ne vous convienne pas.

Il y a beaucoup de facteurs subjectifs impliqués dans le choix d'un framework, et à moins que tous les autres frameworks manquent de fonctionnalités dont vous avez absolument besoin - et ne pouvez pas écrire par vous-même, vous devez éviter ZF et utiliser un framework qui vous semble plus naturel.

Si vous connaissez les concepts, le cadre ne devrait pas vous gêner.

38
yannis

Je n'aimais pas le manque de découverte lorsque j'ai commencé à utiliser le Zend Framework, trop de classes s'appuient sur des tableaux et vous devez rechercher les clés que vous pouvez/devez définir.

Il n'y a rien de mal à avoir des méthodes claires ou des paramètres nommés, cela contribuerait grandement à la découverte.

Le cadre Yii est encore pire avec ce genre de chose.

11
DBlackborough

Quelques problèmes avec ZF, qui rendent ennuyeux (et difficile pour les débutants) de travailler avec:

ORM non inclus . On pourrait penser que cela devrait être très basique du framework MVC moderne, mais ZF ne vient qu'avec Zend_Db_Table, qui est ridiculement bas niveau. Vous pouvez utiliser Doctrine, mais alors vous êtes seul, il n'est en aucune façon intégré à ZF.

Routeurs URL illisibles et gonflés . Par exemple, il faut 9 lignes de code pour définir le plus simple des routages:

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

Étant donné quantité de questions liées à cela c'est tout sauf simple pour la plupart des gens. De plus, je ne peux pas m'en empêcher et le comparer à Django, où l'équivalent ci-dessus serait

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

Zend_Acl est un moyen compliqué pour la plupart des cas d'utilisation. Normalement, vous auriez une authentification pour identifier l'utilisateur. Et une option pour limiter facilement l'accès à certains contrôleurs uniquement aux utilisateurs authentifiés. Pour de nombreux cas d'utilisation, cela suffit. Pour les cas plus compliqués, il appartiendrait à la logique métier du contrôleur de déterminer si l'utilisateur dispose des autorisations pour effectuer certaines actions. Dans ZF, vous n'avez pas la possibilité de limiter facilement l'accès uniquement aux utilisateurs authentifiés, la méthode standard consiste à utiliser l'ACL et le système de rôles, quelle que soit la simplicité de vos besoins.

Répertoire gonflé et disposition des fichiers . Structure de répertoire recommandée ressemble à ceci:

<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 est comme un tas de bibliothèques indépendantes qui fonctionnent ensemble comme un framework. Il est très difficile de développer quelque chose à la fois découplé et "facile à utiliser". Par "facile à utiliser", je veux dire faire des choses complexes avec quelques lignes de code.

Donc, commencer avec Zend est plus difficile que d'autres frameworks, comme CakePHP. Mais il me permet également d'étendre et de personnaliser plus facilement votre application sans codes sales. Zend suit également les normes et les modèles de conception dans tout son code, donc une fois que vous avez lu le code du framework, vous pouvez deviner ce qui se passe.

Lorsque vous dites que vous n'avez aucune idée de la façon dont les modèles, les vues et les contrôleurs fonctionnent ensemble, ne blâmez pas le framework. Il implémente MVC comme n'importe quel autre framework, sauf qu'il sépare le modèle de la structure de la base de données, qui dans de nombreux frameworks est implémentée dans la même classe. Donc tu vas faire face à beaucoup de classes comme Zend_Db_Table, Zend_Db_Table_Row, Zend_Db_Table_Rowset, etc ...

C'est pourquoi je pense que Zend Framework est plus compliqué, car il est très découplé et vous pouvez utiliser ses classes dans d'autres projets qui n'utilisent pas ZF.

4
gustavotkg

Zend Framework nécessite une base solide dans OOP et Design Patterns. D'après mon expérience, je ne trouve que des programmeurs Java-JEE-Struts-Spring expérimentés qui se familiarisent facilement avec Zend Framework. Moyenne PHP Le développeur a du mal à digérer les concepts et l'architecture derrière Zend Framework. Mais voyez bon! Zend Framework vient de la société 'Zend' qui crée PHP en premier lieu. Donc il faut peut-être réfléchir, sinon respecter!

3
Rohit