¿MVC es solo el SEO de la programación PHP?

9

Hay alrededor de un millón de "marcos PHP". Y la mayoría de ellos se consideran a sí mismos siguiendo el patrón MVC. Si bien es bienvenido superar el estilo de codificación de osCommerce (lógica de procesamiento fuertemente entremezclada con SQL y HTML), ciertamente existen enfoques más simples y fáciles de seguir para obtener un diseño de aplicación que se pueda mantener.

El concepto MVC original estaba dirigido a aplicaciones GUI. Y para Gtk / Python parece factible seguirlo en consecuencia. Pero las aplicaciones web PHP no funcionan con vistas en vivo (elementos GUI) y un tiempo de ejecución del controlador persistente. Ciertamente es un nombre inapropiado si solo describe el grupo de código + directorio utilizado o el nombre de clase.

"MVC" parece ser usado como una palabra de moda para frameworks PHP. Y en realidad he visto que uno o dos frameworks PHP maduros lo admiten, pero redefiniendo la frase de todos modos para que coincida con interna.
Entonces, ¿es generalmente aceite de serpiente? ¿Por qué no se utiliza una mejor terminología y se propaga un concepto más sensible para mantener PHP?

Algún razonamiento elaborativo

Por qué sospecho que las implementaciones de PHP no siguen el patrón MVC real:

Modelos : en teoría, los modelos deben ser gruesos y contener lógica empresarial, y los controladores deben ser manejadores delgados (entrada-> salida). En realidad, los marcos de PHP abogan por modelos superficiales . CI y Symfony, por ejemplo, equivalen a Modelo == ORM. Incluso la entrada HTTP es manejada por el controlador, no se trata como modelo.

Vistas : soluciones alternativas con AJAX con descuento, no puede haber Vistas en las páginas web. Los marcos PHP aún bombean páginas. La interfaz sigue efectivamente el modelo HTTP ordinario, no hay ventaja sobre las aplicaciones que no son MVC. (Y, por último, ninguno de los frameworks php generalizados puede salir a las Vistas GUI en lugar de HTML. He visto una biblioteca PHP que puede operar Gtk / Console / Web, pero los frameworks no).

Controlador : no estoy seguro. Los controladores probablemente no necesiten ser de larga duración y persistentemente activos en el modelo MVC. Sin embargo, en el contexto del marco PHP, en su mayoría son manejadores de solicitudes. No es realmente algo sobre lo que debatir, pero se siente un poco de moda.

¿Habría mejores descriptores? He visto acrónimos como PMVC o HMVC. Aunque las descripciones se vuelven más ambiguas allí, ¿tal vez estas describirían los marcos web actuales menos tontos?

mario
fuente
Entonces, en conclusión: los frameworks PHP implementan un concepto similar al MVC original. Creo que es mejor clavarlo aquí: stackoverflow.com/questions/1549857/simple-php-mvc-framework/…
mario
Me sorprendió leer que "la mayoría de los marcos PHP usan las Vistas como simples páginas". En todos los marcos PHP que he usado, una vista puede ser cualquier cosa, básicamente es solo una plantilla HTML. Por lo tanto, podría ser un cuadro de texto, una barra lateral, una barra de navegación, un bloque de texto estático o incluso un diseño de página. No puedo pensar en ningún marco que no le permita incrustar Vistas dentro de Vistas, permitiéndole hacer casi cualquier cosa siempre que su lógica / procesamiento comercial real se realice en el Controlador de antemano.
Lotus Notes
El modelo (no plural) es una capa . No es un solo archivo o clase. Es una colección de objetos de dominio, mapeadores de datos y servicios. Leer este .
James
3
... SEO? ¿"Optimización de motores de búsqueda"?
Izkata

Respuestas:

12

Creo que estás viendo esto de una manera completamente incorrecta. Una aplicación GUI y una página web son mundos aparte, por lo que la misma definición exacta de MVC nunca funcionará para ambos. MVC tiene más que ver con el ideal: separar ciertas partes de la aplicación, como la pantalla y la lógica.

En PHP (o en la web en general), una vista es la página web en sí: la salida HTML. No es "en vivo" según su definición, pero simplemente hace clic en los enlaces para volver al controlador (es decir, otra solicitud de página).

El controlador y el modelo es donde las cosas difieren, como usted explicó. En PHP, el modelo tiende a ser la capa de datos, interactuando con la base de datos, etc. Pero todavía está modelando la situación, y el controlador aún controla el flujo de la aplicación, aunque solo sea una vez por carga de página.

Por lo tanto, el nombre "Modelo-Vista-Controlador" es perfectamente lógico, aunque una implementación diferente en aplicaciones GUI frente a aplicaciones web.

Cabra descontento
fuente
No tengo nada en contra del concepto abstracto de MVC. Mi objeción es que los frameworks PHP son deshonestos sobre la implementación de Passive-MVC. Incluso el patrón "Modelo-Vista-Presentador" es una descripción más realista. Pero claro, los términos deben ser doblados cuando los aplica a un dominio diferente. La pregunta original; ¿podría el término doblar convertirlo en una palabra de moda?
mario
3

Como no conozco los marcos PHP, esto se ve desde una vista de lenguaje de bajo nivel.

Modelos:

en teoría, los modelos deberían ser gordos y contener lógica de negocios

Eso está completamente por hacer, no veo qué tiene que ver PHP con esto ...

Los modelos son clases de datos en PHP que probablemente podrían comunicarse con la base de datos,
luego también podría enviar el mismo modelo o un modelo parcial en formato JSON al cliente.

No diría lógica empresarial, es más como lógica de datos (validación, interacción con la base de datos, importación / exportación, ...).

y los controladores deben ser manejadores delgados (entrada-> salida)

Sus clases de Controlador interactúan con las clases de Modelo, de hecho son delgadas.

Según la salida, haga algunas cosas con los Modelos ... Y devuelva un ModelView al cliente ...

En realidad, los marcos de PHP abogan por modelos poco profundos. CI y Symfony, por ejemplo, equivalen a Modelo == ORM. Incluso la entrada HTTP es manejada por el controlador, no se trata como modelo.

No estoy realmente al tanto de esos marcos PHP ...

Pero la entrada HTTP debe manejarse antes de que llegue al controlador,
puede crear fácilmente una clase que convierta los datos GET y POST en buenos enrutamiento y parámetros.

Esto es exactamente lo que sucede en ASP.NET MVC 2 y no tiene nada de malo,
no sé cómo sucedería esto con PHP, pero supongo que estaría estrechamente relacionado.

Incluso podría convertir fácilmente los datos GET y POST en un modelo, el modelo podría contener lógica de constructor para eso. O se podrían agregar algunas clases separadas para ese propósito.


Puntos de vista:

soluciones alternativas con AJAX con descuento, no puede haber Vistas en las páginas web. Los frameworks PHP aún bombean páginas.

No veo por qué no pudo, la única diferencia es el protocolo y PHP puede devolver JSON, etc.

Una página es su punto de vista y puede solicitar y actualizar a través de AJAX + JSON.
Una vez más, no estoy al tanto de esos marcos PHP, pero en ASP.NET MVC 2 funciona de esa manera.

La interfaz sigue efectivamente el modelo HTTP ordinario, no hay ventaja sobre las aplicaciones que no son MVC. (Y, por último, ninguno de los frameworks php generalizados puede salir a las Vistas GUI en lugar de HTML. He visto una biblioteca PHP que puede operar Gtk / Console / Web, pero los frameworks no).

La única ventaja que obtienes (y eso es lo mismo con las aplicaciones normales) es la separación en Modelo (Datos) + Vista (GUI) + Controlador (Lógica). De forma similar, no verá un marco de trabajo de C ++ que pueda generar datos en HTML o JSON en lugar de vistas GUI.


Controlador:

No estoy seguro Los controladores probablemente no necesiten ser de larga duración y persistentemente activos en el modelo MVC. Sin embargo, en el contexto del marco PHP, en su mayoría son manejadores de solicitudes. No es realmente algo sobre lo que debatir, pero se siente un poco de moda.

MVC es una arquitectura / patrón de software, donde se ejecuta el Controlador y durante cuánto tiempo no importa.

Tamara Wijsman
fuente
1

Pero las aplicaciones web PHP no funcionan con vistas en vivo (elementos GUI) y un tiempo de ejecución del controlador persistente.

¡No, seguro que sí!

Piense en las aplicaciones AJAX, luego la vista le pregunta algo al controlador y obtiene una vista parcial,
esta vista o datos se completan en algún lugar de la página y, por lo tanto, se actualizan en vivo.

El controlador también es persistente porque puede usar cookies / sesiones.

"MVC" parece ser usado como una palabra de moda para frameworks PHP.

MVC es una arquitectura de software, algunos marcos pueden usarlo como un zumbido, pero otros lo hacen correctamente ...
Vea una lista de algunos marcos en Wikipedia .

¿MVC es solo el SEO de la programación php?

MVC y SEO son dos cosas separadas, pero sí ... MVC se está volviendo más popular.

Tamara Wijsman
fuente
1
Claro, los elementos de la interfaz de usuario de AJAX lo acercan, pero objetivamente es una solución alternativa. Y todavía parece doblar la definición. (Por cierto, estoy al tanto de Cappucino.org y otros kits de herramientas reales, pero estaba haciendo referencia a la gran cantidad de marcos PHP.)
Mario
No lo llamaría una solución alternativa, también podría contar Qt y otros marcos como soluciones alternativas entonces ... Solo existe la sobrecarga de transferencia de datos entre el servidor y el cliente, y con las velocidades y latencias de conexión actuales, esto ni siquiera es mucho nunca más. No veo cómo está doblando la definición: el patrón aísla la lógica de dominio (la lógica de aplicación para el usuario) de la entrada y la presentación (UI), lo que permite el desarrollo, las pruebas y el mantenimiento independientes de cada uno.
Tamara Wijsman
1
Veo a que te refieres. Si interpreta PHP como servidor de aplicaciones y AJAX como mecanismo RPC entre lógica y UI, sí. Sin embargo, todavía lo llamaría una solución alternativa en HTTP. OTOH no está seguro si es relevante para la denominación MVC. Creo que en realidad me opongo a la implicación de que solo "" "MVC" "" proporciona las IU web receptivas e interactivas que usted describe.
mario
-1

En mi opinión, usar MVC en php trae programadores a la web. Es más fácil pasar de Java a PHP, por ejemplo, cuando sabes cómo trabajar con MVC.

baklap
fuente
+1 Pero, ¿es solo una ventaja terminológica, o existen marcos PHP que están cerca de una implementación de Java? (E implícitamente, ¿estás hablando de GUI de Java o Web / Struts?)
Mario
No sé exactamente, pero estoy usando Zend Framework y supongo que es lo mismo con otros frameworks MVC: es muy importante saber qué hacer en su modelo, vista y controlador y, por lo tanto, la brecha entre el mundo de la programación y el internetscripting El mundo está cerrado. Quizás la era de los internets ha terminado, y me encantaría ver eso. Es demasiado con errores.
baklap