¿Por qué es tan complicado Zend Framework?

42

Soy desarrollador web y tengo experiencia en el desarrollo de varias aplicaciones web en PHP. Tengo una idea de desarrollar un producto para mí y decidí usar un marco basado en MVC porque realmente me gusta la idea de MVC y cómo uno puede administrar y modificar fácilmente la aplicación sin ninguna dificultad.

Elegí Zend Framework y parece más difícil que aprender un nuevo lenguaje de programación. Hay tantas cosas que suceden al mismo tiempo incluso para ejecutar una pequeña aplicación.

Del mismo modo, la idea de enrutamiento es muy compleja, ya que es nueva para un programador central. Sé que los muchachos aquí leen miles de preguntas como la que estoy haciendo, pero no estoy buscando aprender Zend Framework de la noche a la mañana. Estoy dispuesto a dar todo el tiempo que necesite, pero hasta ahora no tiene sentido para mí. Hay miles de clases en la biblioteca Zend, pero ¿cómo sabría un novato dónde usar una clase específica y cómo usarla? Todavía me resulta muy difícil entender el arranque de Zend Framework y su mapeo. Leo el manual, lo sigo y las cosas comienzan a funcionar, pero realmente no sé exactamente cómo están sucediendo.

Tampoco tengo ni idea de cómo los modelos, las vistas y los controladores funcionan juntos y cómo planificar una aplicación en Zend Framework. Cuando se trata de php central, tengo exactamente la idea en mente de qué hacer y luego traducirlos fácilmente en código, pero en Zend Framework no sé cómo traducir mi idea.

Umair Abid
fuente
10
Si es nuevo en MVC, implemente un andamio MVC usted mismo antes de usar cualquiera de los completos: no son buenos para aprender.
treecoder
2
@greengit eso es lo que hice!
Kyle Hodgson
Zend Framework no es difícil, requiere un poco de tiempo para aprender, debido a la mala documentación, pero puedo asegurarle que es un marco muy poderoso. Hemos creado software para grandes empresas en ZF2, y la flexibilidad en la configuración es extraordinaria en ZF.
albanx

Respuestas:

38

Zend Framework es difícil. No se construyó como un marco de nivel de entrada, se supone que el conocimiento de los conceptos involucrados 1 . Dicho esto, el primer requisito para Zend Framework 2.0 es hacerlo un poco más fácil:

Facilita la curva de aprendizaje

A fines de 2009, realizamos una encuesta a los usuarios del marco para determinar qué usan, qué entornos usan y cuáles son sus necesidades. El problema principal, sin excepción, fue la dificultad de aprender el marco. Algunos de estos problemas incluyen:

  • Dificultad en la "primera hora" con el marco.
  • Incertidumbre sobre los "próximos pasos" después del inicio rápido.
  • API inconsistentes en el propio código fuente. Un componente puede usar "complementos", otro "ayudantes" y otros "filtros".
  • Incertidumbre sobre dónde existen los puntos de extensión y cómo programarlos.
  • Confusión sobre si pueden usar Zend Framework solo como una pila MVC o como componentes individuales.

Así que no eres solo tú, es difícil para todos: lee la página wiki completa, hay algunas cosas que se identifican como innecesariamente complejas. Pero incluso si se cumple el requisito anterior, aún no se convertirá en un marco de nivel de entrada, lo que significa que no es un marco en el que debería estar aprendiendo, sino uno que debería usar cuando realmente haya entendido los conceptos involucrados.

Como todavía está aprendiendo, sería mucho más valioso construir su propia arquitectura MVC. Rasmus Lerdorf notoria 2 " La no-marco framework PHP MVC " entrada en el blog da un ejemplo muy sencillo y limpio de MVC PHP a través de procedimiento, sin un marco u otra biblioteca de terceros involucrados.

Pero si realmente quieres aprender con un marco, debes considerar un micro marco en lugar de uno completo. Slim tiene una base de código muy pequeña, limpia y completamente probada y debería ser ideal para el aprendizaje. No he jugado con ningún otro micro marco, debes hacer tu propia investigación y decidir cuál es mejor para ti.

Y para una introducción rápida y sucia al enrutamiento, vea mi respuesta a esta pregunta . No es un concepto muy difícil de entender, pero Zend Framework lo hace parecer mucho más de lo que realmente es .

1 La mejor descripción que he leído para ZF es que es un marco de creación de marcos , no un marco de aplicaciones. Su potencia bruta y su extrema lista de características no son adecuadas para sitios web pequeños o medianos. Lamentablemente no puedo encontrar realmente donde leí eso.

2 Lea el descargo de responsabilidad en la parte superior de la publicación del blog.


Actualización, inspirada en el comentario de @ Karpie:

Se supone que un marco no es difícil, el objetivo de un marco es facilitar las cosas. Es posible que incluso con una comprensión firme de los conceptos involucrados, ZF no sea una buena opción para usted.

Hay muchos factores subjetivos involucrados al elegir un marco, y a menos que cualquier otro marco carezca de la funcionalidad que absolutamente necesita, y no puede escribir por su cuenta, debe evitar ZF y usar un marco que le parezca más natural.

Si conoce los conceptos, el marco no debería interferir.

Yannis
fuente
3
Incluso con el conocimiento de los conceptos, es muy difícil entrar, y para ser honesto, no creo que valga la pena el esfuerzo. La documentación a menudo es incorrecta, ejemplos en la web después de estar desactualizados, el canal de soporte de IRC generalmente está muerto y, por lo que he visto, no hay otro lugar para obtener soporte.
sevenseacat
@Karpie No me resulta tan difícil, para ser honesto. Pero es algo idiomático, por lo que definitivamente se adapta mejor a algunos desarrolladores que a otros. Por ejemplo, me resulta más fácil de entender que CodeIgniter, pero eso es solo por mi proceso personal: prefiero leer el código que la documentación, y el código de CI está tan lleno de basura que mi mente se apaga. Pero para la mayoría de los desarrolladores, CI es mucho más fácil de aprender que ZF, y no todos están de acuerdo en que el código de CI esté lleno de basura. Lo importante es que no se supone que un marco sea difícil de usar, si es que siempre hay otros por ahí.
yannis
Me parece que Zend Framework 1 es relativamente fácil de entender. Pero dijiste que la idea detrás de ZF2 era hacerlo más fácil , siento que es mucho más complejo que nunca.
comprado777
Todo en ZF2 es demasiado complicado. Estaría bien presentar el "marco" de Zend como una colección de módulos / bibliotecas. Falta el marco real. No hay una capa de modelo, por lo que debe implementar la suya, que generalmente es un desastre o usar Doctrine, que requiere cierta integración. Para escribir algunas pruebas unitarias, debe pasar una cantidad ridícula de tiempo descifrando el manual y escribiendo (o tratando de encontrar en línea) algún código solo para iniciar sus pruebas. Si bien puede basarse en conceptos sólidos, su interpretación de esos conceptos es terrible.
vladko
11

No me gustó la falta de capacidad de descubrimiento cuando comencé a usar Zend Framework, demasiadas clases dependen de matrices y hay que buscar qué claves puede / necesita definir.

No hay nada de malo en tener métodos establecidos claros o parámetros con nombre, sería, en gran medida, ayudar a descubrir.

El marco Yii es aún peor con este tipo de cosas.

DBlackborough
fuente
3
+1 Mi razón importante para no considerar seriamente la adopción de ZF / ZF2 tiene que ser la fea, autocompletar / insinuar y configuraciones basadas en arreglos anidados que evitan el sentido. Infringe mi aversión personal al uso excesivo de matrices en un mundo OO.
Gavin Howden
1
Precisamente mi opinión también.
Daniel
No encuentro Yii 1 como demasiado difícil. Quizás eso sea para mí. : P
Eugine Joseph
5

Algunos problemas con ZF, que hacen que sea molesto (y difícil para los principiantes) trabajar con ellos:

ORM no incluido . Uno podría pensar que esto debería ser la base del marco MVC moderno, sin embargo, solo viene con ZF Zend_Db_Table, que es ridículamente de bajo nivel. Puedes usar Doctrine, pero entonces estás solo, no está integrado de ninguna manera con ZF.

Enrutadores de URL hinchables e ilegibles . Por ejemplo, se necesitan 9 líneas de código para definir el enrutamiento más simple:

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

Dada la cantidad de preguntas relacionadas con esto , es todo menos simple para la mayoría de las personas. Además, no puedo evitarlo y compararlo con Django, donde el equivalente de arriba sería

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

Zend_AclEs muy complicado para la mayoría de los casos de uso. Normalmente tendría autenticación para identificar al usuario. Y una opción para limitar fácilmente el acceso a algunos controladores solo a usuarios autenticados. Para muchos casos de usuarios eso es suficiente. Para casos más complicados, dependería de la lógica empresarial en el controlador determinar si el usuario tiene permisos para realizar ciertas acciones. En ZF no tiene la opción de limitar fácilmente el acceso solo a usuarios autenticados, la forma estándar es usar ACL y el sistema de roles, independientemente de cuán simple sea realmente su necesidad.

Directorio hinchado y diseño de archivos . La estructura de directorio recomendada se ve así:

<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/
vartec
fuente
4

Zend Framework es como un montón de bibliotecas independientes que juntas funcionan como un marco. Es muy difícil desarrollar algo al mismo tiempo desacoplado y "fácil de usar". Por "fácil de usar" me refiero a hacer cosas complejas con pocas líneas de código.

Entonces, comenzar con Zend es más difícil que otros frameworks, como CakePHP. Pero también es más fácil extender y personalizar su aplicación sin códigos sucios. Zend también sigue estándares y patrones de diseño en todo su código, por lo que una vez que lea el código del marco, puede adivinar lo que está sucediendo.

Cuando diga que no tiene idea de cómo funcionan juntos los modelos, las vistas y los controladores, no culpe al marco. Implementa MVC como cualquier otro marco, excepto que separa el modelo de la estructura de la base de datos, que en muchos marcos se implementan en la misma clase. Entonces te enfrentarás a muchas clases como Zend_Db_Table, Zend_Db_Table_Row, Zend_Db_Table_Rowset, etc.

Es por eso que creo que Zend Framework es más complicado, porque está muy desacoplado y puedes usar sus clases en otros proyectos que no usan ZF.

gustavotkg
fuente
3

Zend Framework requiere una base sólida en OOP y patrones de diseño. Según mi experiencia, solo encuentro programadores experimentados de Java-JEE-Struts-Spring que se familiarizan fácilmente con Zend Framework. El desarrollador promedio de PHP tiene dificultades para digerir los conceptos y la arquitectura detrás de Zend Framework. Pero mira hey! Zend Framework proviene de la compañía 'Zend' que crea PHP en primer lugar. Por lo tanto, necesita algo de reflexión, tal vez si no respeto.

Rohit
fuente
1
Rasmus Lerdorf creó php, zend es un gran defensor de php. Por lo que recuerdo.
Sarmen B.
No puedo estar en desacuerdo allí. Soy un desarrollador de Java. No solo encontré mi camino en ZF fácilmente, sino que lo preferí a otros frameworks.
jkushner
-2

Creo que zend es solo para complicar las cosas, MVC es solo un fraude, lógicamente funciona como PHP simple. pero lo está desarrollando frente a MVC, como separar archivos en diferentes directorios.

Recuerda que quien dice que Zend es muy seguro e incapaz de hackear es un gran tonto. Zend también puede piratear fácilmente si no usó protecciones de inyección Mysql. Me gustaría sugerirle que defina sus propias funciones, luego separe sus archivos en diferentes directorios para que sea similar, como MVC, guarde sus funciones, clases y otro material principal en un directorio llamado controlador y luego agregue sus páginas web en un directorio diferente donde lo necesite para incluir todos esos archivos de funciones que este directorio conocerá como vista. coloque sus archivos javascript y css en diferentes directorios que se conocerán como modelo.

Recuerde que, en este mundo, muchas personas siempre trabajan duro para hacer las cosas más complicadas, porque ellas mismas son complicadas de entender.

PHP es el lenguaje que has aprendido en el libro y de los maestros. Zend no es más que un marco, para complicar las cosas a sus clientes. así que cada vez que el cliente necesite alguna modificación, volverán a los desarrolladores reales y esos desarrolladores le cobrarán más dinero. Zend está protegido, todo es mentira, un solo error, como la codificación php simple, puede hacer que el sitio web sea pirateable.

Pooja dhimbani
fuente
-6

Al menos, el "inicio rápido" debe ser más fácil para hacer un marco amigable ... si prefieres algo más difícil como algo mejor, entonces diría "ZF es el mejor marco PHP", de lo contrario NO. Descargué ZF-2 y lo probé (sinceramente, soy novato en ZF). Lo triste es que todavía no he encontrado una sólida "guía de inicio rápido" con un simple Project Skeleton en Internet. Todo lo que busco es una forma sencilla de incluir archivos de biblioteca y crear una carpeta de proyecto con funciones MVC. He usado Codeigniter, Cake php, Yii pero lo encontré bastante hostil. Sí, sé que Zend actualiza PHP, pero eso no significa que sea el mejor marco o lo que sea que digas.

RAM
fuente
no me gusta .... LOL
Ram