Pregunta

Hay alrededor de un trillón de "marcos de PHP". Y la mayoría de ellos se cotizan como siguiente el patrón MVC. Si bien es bienvenido a superar estilo de codificación osCommerce (lógica fuertemente entremezclado con SQL y HTML de procesamiento), sin duda hay más simple y más fácil de seguir enfoques para obtener un diseño de una aplicación fácil de mantener.

El concepto original fue MVC dirigidos a las aplicaciones GUI. Y para GTK / Python parece factible seguir en consecuencia. Pero PHP aplicaciones web no operan en Vistas en vivo (elementos GUI) y un controlador de tiempo de ejecución persistente. Es con toda seguridad un término equivocado si sólo se describe el directorio + código utilizado agrupación o denominación de clase.

"MVC" parece ser utilizado como una palabra de moda para marcos de PHP. Y de hecho he visto uno o dos maduro marcos de PHP admitirlo, pero la redefinición de la frase de todas formas para que coincida interna.
Por lo que es generalmente aceite de serpiente? ¿Por qué no mejor terminología utilizada, y un concepto más sensato para PHP mantenible propagado?

Algunos razonamiento elaborative

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

Modelos : en teoría, modelos deben ser grasa y contienen la lógica de negocio, y los controladores deben ser manipuladores delgadas (input-> salida). En realidad, los marcos de PHP abogan poco profundas Modelos. CI y Symfony por ejemplo equiparar Modelo == ORM. Incluso de entrada HTTP es manejado por el controlador, no se trata como modelo.

Vistas : soluciones con AJAX descuentan, no puede haber puntos de vista sobre las páginas web. frameworks PHP todavía bombear páginas. La interfaz todavía sigue eficazmente el modelo HTTP ordinaria, no hay ninguna ventaja sobre las aplicaciones no MVC. (Y, por último, ninguno de los marcos de PHP generalizadas puede de hecho la salida de interfaz gráfica de usuario Vistas en lugar de HTML. He visto una biblioteca PHP que puede operar Gtk / Consola / Web, pero los marcos no lo hacen.)

controlador : No estoy seguro. Controladores probablemente no necesitan ser de larga duración y persistentemente activa en el modelo MVC. En el contexto framework PHP, sin embargo, que están en su mayoría controladores de solicitudes. No es realmente algo para llegar sobre argumentativo, sino que sólo se siente un poco buzzwordish.

¿Habría mejores descriptores? que he visto siglas como PMVC o HMVC lanza alrededor. Aunque las descripciones se ponen más ambiguo allí, tal vez estos se describen los marcos actuales de la web menos hokey?

¿Fue útil?

Solución

creo que usted está buscando en esta completamente el camino equivocado. Una aplicación de interfaz gráfica de usuario y una página web son mundos aparte por lo que la misma definición exacta de MVC nunca funcionará para ambos. MVC es más sobre el ideal:. Separar ciertas partes de la aplicación como la pantalla y la lógica

En PHP (o la web en general), un Ver es la propia página web: la salida HTML. No es "en vivo" según su definición, sino que simplemente haga clic en los enlaces para volver al controlador (es decir, otra solicitud de página).

La controlador y Modelo es donde las cosas son diferentes, al igual que sus explicaciones. En PHP el modelo tiende a ser la capa de datos, interactuando con la base de datos y así sucesivamente. Pero todavía es el modelado de la situación, y el controlador todavía controla el flujo de la aplicación, aunque sólo sea una vez por carga de la página.

Así que el nombre de "Model-View-Controller" es perfectamente lógico, aunque sea una aplicación diferente en aplicaciones GUI vs aplicaciones web.

Otros consejos

Como estoy al tanto de la PHP marcos de esto es visto desde un punto de vista lenguaje de bajo nivel.

Modelos:

en teoría, debería ser modelos de grasa y contienen la lógica de negocio

Eso es totalmente de hacer, no veo lo que PHP tiene que ver con esto ...

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

Yo no diría que la lógica de negocio, se parece más a la lógica de datos (validación, la interacción de bases de datos, importación / exportación, ...).

y controladores deben ser manipuladores delgadas (input-> salida)

Las clases del controlador interactuar con las clases del modelo, son de hecho delgada.

Sobre la base de la salida, hacer algunas cosas con los modelos ... y devolver una modelview al cliente ...

En realidad, los marcos de PHP abogan por modelos de poca profundidad. CI y Symfony por ejemplo equiparar Modelo == ORM. Incluso de entrada HTTP es manejado por el controlador, no se trata como modelo.

No estoy muy al tanto de los marcos de PHP ...

Pero HTTP de entrada debe ser manejado antes de que llegue el controlador, España usted puede crear fácilmente una clase que convierte reciben y envían datos de destino en buena enrutamiento y parámetros.

Esto es exactamente lo que sucede en ASP.NET MVC 2 y no hay nada malo en ello, España No sé cómo esto iba a pasar con PHP pero supongo que estaría estrechamente relacionado.

Incluso podría fácilmente convertir el GET y datos POST en un modelo, el modelo quizá podría contener la lógica constructor para eso. O algunas clases separadas podrían añadirse a tal efecto.


Vistas:

soluciones con AJAX descuentan, no puede haber puntos de vista sobre las páginas web. frameworks PHP todavía bombear páginas.

No veo por qué no podía, la única diferencia es el protocolo y PHP puede volver JSON, etc ...

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

La interfaz todavía sigue eficazmente el modelo HTTP ordinaria, no hay ninguna ventaja sobre las aplicaciones no MVC. (Y, por último, ninguno de los marcos de PHP generalizadas puede de hecho la salida de interfaz gráfica de usuario Vistas en lugar de HTML. He visto una biblioteca PHP que puede operar Gtk / Consola / Web, pero los marcos no lo hacen.)

La única ventaja que se obtiene (y eso es lo mismo con las aplicaciones normales) es la separación en Modelo (Datos) + Ver (GUI) + controlador (lógica). Similares, que no verá un marco de C ++ que pueden de hecho la salida a HTML o JSON en lugar de GUI Vistas.


controlador:

No estoy seguro. Controladores probablemente no necesitan ser de larga duración y persistentemente activa en el modelo MVC. En el contexto framework PHP, sin embargo, que están en su mayoría controladores de solicitudes. No es realmente algo para llegar sobre argumentativo, sino que sólo se siente un poco buzzwordish.

MVC es una arquitectura de software / patrón, en el que el controlador funciona y por cuánto tiempo hace que no Mather.

Sin embargo, las aplicaciones web PHP no operan en Vistas en vivo (elementos GUI) y un controlador de tiempo de ejecución persistente.

No, seguro que hacen!

Piense en las aplicaciones AJAX, entonces la vista pregunta algo al controlador y consigue un vista posterior parcial,
este punto de vista o los datos se llenan entonces en algún lugar de la página y por lo tanto en vivo actualizada.

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

"MVC" parece ser utilizado como una palabra de moda para marcos de PHP.

MVC es una arquitectura de software, algunos marcos podrían utilizarlo como un zumbido, pero otros hacerlo correctamente ...
Ver una lista de algunos marcos de Wikipedia .

MVC es simplemente el SEO de programación php?

MVC y SEO son dos cosas separadas, pero eso sí ... MVC es cada vez más popular.

En mi opinión el uso de MVC en PHP trae a los programadores a la web. Es más fácil obtener de, por ejemplo, Java para PHP cuando se sabe cómo trabajar con MVC.

Licenciado bajo: CC-BY-SA con atribución
scroll top