vista software programing presentador mvc modelo diferencias caracteristicas php asp.net mvp design-patterns

software - ¿PHP es compatible con el patrón MVP?



mvp vs mvc (4)

Compruebe esta biblioteca Mutant Vole PHP

Hay muchos ejemplos que explican el patrón MVP usando ASP.NET pero no encontraron nada usando PHP.

Soy programador de PHP y quiero saber dónde puedo obtener ejemplos de PHP de patrón MVP.


En mi opinión, Lion Framework (www.lionframework.org) es la implementación más madura de MVP hoy en día.


La respuesta corta es: Sí PHP lo hace .

(Nota, no es exactamente MVP como se describe en su documento original, sino una variación para la web)

La diferencia entre MVC y MVP es que, una vista es totalmente pasiva y desconoce la capa del modelo. Mientras está en MVC no es pasivo y conoce la capa de modelo. En MVP adecuado, la clase View (si lo es) tampoco DEBERÍA implementar un constructor.

Un ejemplo típico de MVP consistirá en estas partes:

  1. Capa de acceso a datos (DataMappers, ORM, etc.)
  2. Lógica empresarial (como validación y cálculos)
  3. Clase de vista pasiva (podría ser una plantilla, pero sería mejor quedarse con una clase)
  4. El presentador que une el Modelo y la Vista

Un ejemplo de cómo implementar Model-View-Presenter con PHP

Nota: Un modelo en el escenario del mundo real no es una clase, sino una capa de abstracción, que contiene muchas clases para manejar la lógica de la aplicación. Yo lo llamaría "Modelo" con fines de demostración.

class Model { public function getSomeStuff() { return array(''foo'' => ''bar''); } } class View { public function render($path, array $vars = array()) { ob_start(); extract($vars); require($path); return ob_get_clean(); } } class Presenter { private $model; private $view; public function __construct(Model $model, View $view) { $this->model = $model; $this->view = $view; } public function indexAction() { $data = $this->model->getSomeStuff(); // Variables are set now, render the HTML // And returns as a string return $this->view->render(''path/to/template.phtml'', $data); } }

Archivo: template.phtml

<!DOCTYPE html> <html> <head> <title>...</title> </head> <body> <?php foreach($vars as $key => $value): ?> <p><?php echo $key; ?> : <?php echo $value; ?></p> <?php endforeach; ?> </body> </html>

Y el uso es:

$model = new Model(); $view = new View(); $presenter = new Presenter($service, $view); echo $presenter->indexAction();

Tenga en cuenta que este es un ejemplo muy simplificado. En el escenario del mundo real, cualquier aplicación basada en MVP DEBERÍA implementar cosas como: enrutador, autocargador de clase SPL.


MVP y MVC están diseñados para aplicaciones GUI. La mayoría de los marcos PHP usan "MVC" más como palabra de moda . La implementación real con modelos tontos (solo base de datos), vistas no activas (= plantillas) y controladores de orquesta ya coincide realmente con MVP. Y los controladores de funcionalidad funcional a menudo funcionan como presentadores de todos modos, traspasando los datos de los modelos a las vistas. (En MVC adecuado, el modelo y la vista interactúan más, con la vista siendo realmente el componente activo).

Pero de todos modos, hay algunos marcos que son realmente conscientes de la terminología y el patrón más nuevos.