el patrón arquitectónico MVC @eugeniabahit PATRÓN ARQUITECTÓNICO Plantilla que define la estructura de un Sistema y las normas de organización para construir el Software Patrón arquitectónico: “ MVC Universidad Nacional de Avellaneda | www.undav.edu.ar
el patrón arquitectónico MVC @eugeniabahit MODEL-VIEW-CONTROLLER Patrón Arquitectónico que define la estructura de un sistema, separando la lógica de negocio de la interfaz de usuario Modelo, vista, controlador: “ MVC Universidad Nacional de Avellaneda | www.undav.edu.ar
el patrón arquitectónico MVC @eugeniabahit De lo general a lo particular y de lo particular al detalle ¿Cómo funciona? Universidad Nacional de Avellaneda | www.undav.edu.ar
el patrón arquitectónico MVC @eugeniabahit Petición VISTA Contacta Retorna MODELO CONTROLADOR Entrega Muestra 1 2 3 4 5 Universidad Nacional de Avellaneda | www.undav.edu.ar
el patrón arquitectónico MVC @eugeniabahit Petición CONTROLADOR Recibe las peticiones del usuario Handler Analiza y transforma la información recibida Helper Instancia al modelo Modifica las propiedades del modelo Llama al método correspondiente Universidad Nacional de Avellaneda | www.undav.edu.ar
datos, retornando al modelo, una matriz con los datos obtenidos Betabeers Buenos Aires | 30 de Marzo de 2012 Entendiendo el patrón arquitectónico MVC @eugeniabahit Capa de abstracción (core de la App) Define las propiedades y los métodos del modelo Los métodos harán uso de la capa de abstracción para acceder a la base de datos. No se conectan a ella directamente. Universidad Nacional de Avellaneda | www.undav.edu.ar
el patrón arquitectónico MVC @eugeniabahit VISTA CONTROLADOR Entrega GUI Renderiza la información formateada en la GUI y la muestra al usuario Lógica Da formato / transforma la información recibida Universidad Nacional de Avellaneda | www.undav.edu.ar
el patrón arquitectónico MVC @eugeniabahit MODELO class Persona { // propiedades public $nombre; public $apellido; // Crear nueva persona public function set_persona() { $data = array('nombre' => $this->nombre, 'apellido' => $this->apellido,); $result = $db_abstract_layer->add('Persona', $data); return $result; // True o False } } Universidad Nacional de Avellaneda | www.undav.edu.ar
el patrón arquitectónico MVC @eugeniabahit Requerida por el Modelo class DBAbstractLayer { // propiedades // .... // conecta a la base de datos // Agregar nuevo dato public function add($model, $data) { $fields = array_keys($data); $values = array_values($data); // formatear $fields y $values $sql = "INSERT INTO {$model} ($fields) VALUES ($values)"; // ejecutar query // retornar mensaje } } Capa de abstracción Universidad Nacional de Avellaneda | www.undav.edu.ar
el patrón arquitectónico MVC @eugeniabahit CONTROLADOR class PersonaController { public function agregar() { // verifica, filtra y analiza la data recibida $data = helper_validar_data_persona(); // instanciar al modelo $persona = new Persona(); // modificar propiedades del modelo $persona->nombre = $data['nombre']; $persona->apellido = $data['apellido']; // llamar al método correspndiente $result = $persona->set_persona(); // enviar datos a la vista $vista = new PersonaView(); $vista->mostrar_msg_nueva_persona($result); } } // handler $controller = new PersonaController(); switch ($peticion) { case 'agregar-persona': $controller->agregar(); Break; // .... } function helper_validar_persona() { if(isset($_POST)) { // filtrar datos... // return $datos_filtrados } } Handler Helper Universidad Nacional de Avellaneda | www.undav.edu.ar
formateo los datos recibidos if($result === True) { $mensaje = 'La persona ha sido agregada'; } else { $mensaje = 'Se ha producido un error'; } // traigo la GUI $gui = file_get_contents('persona.html'); // Hago un render de la GUI $html = str_replace('[[MENSAJE]]', $mensaje, $gui); // muestro la data formateada echo $html; } } Betabeers Buenos Aires | 30 de Marzo de 2012 Entendiendo el patrón arquitectónico MVC @eugeniabahit Universidad Nacional de Avellaneda | www.undav.edu.ar
el patrón arquitectónico MVC @eugeniabahit Universidad Nacional de Avellaneda | www.undav.edu.ar ¿Cómo organizar la estructura de la App? Normas básicas para optimizar la estructura
el patrón arquitectónico MVC @eugeniabahit Universidad Nacional de Avellaneda | www.undav.edu.ar Un archivo por cada modelo. El nombre del archivo, igual al nombre del modelo “ [-] mi-aplicacion [+] core [-] modulo-a [-] modelos persona.php usuario.php [+] vistas [+] controladores [-] modulo-b [+] modelos producto.php [+] vistas [+] controladores
el patrón arquitectónico MVC @eugeniabahit Universidad Nacional de Avellaneda | www.undav.edu.ar Crear un controlador para cada modelo “ [-] mi-aplicacion [+] core [-] modulo-a [-] modelos persona.php usuario.php [+] vistas [-] controladores persona.php usuario.php
el patrón arquitectónico MVC @eugeniabahit Universidad Nacional de Avellaneda | www.undav.edu.ar Crear una vista para cada modelo “ [-] mi-aplicacion [+] core [-] modulo-a [-] modelos persona.php usuario.php [-] vistas persona.php usuario.php [-] controladores persona.php usuario.php
el patrón arquitectónico MVC @eugeniabahit Universidad Nacional de Avellaneda | www.undav.edu.ar Helpers y Handlers deben ir en el directorio del módulo correspondiente “ [-] mi-aplicacion [+] core [-] modulo-a [+] modelos [+] vistas [+] controladores helpers.php handler.php
el patrón arquitectónico MVC @eugeniabahit Universidad Nacional de Avellaneda | www.undav.edu.ar Librerías funciones genéricas y todo dato reutilizable, siempre deben pertenecer al core de la App “ [-] mi-aplicacion [+] core [-] libs PHPTemplate.php DBConn.php FormValidate.php PHPAggregateFuncs.php [+] orm constantes.php settings.php
el patrón arquitectónico MVC @eugeniabahit Pero por sobre todo, NO TE OLVIDES DE UN PRINCIPIO BÁSICO... Universidad Nacional de Avellaneda | www.undav.edu.ar
el patrón arquitectónico MVC @eugeniabahit ¡Soy un documento libre! Descargame en: http://taller-de-php.eugeniabahit.com DISTRIBUIME, COPIAME Y MODIFICAME COMO QUIERAS SE LIBRE COMO EN LIBERTAD Universidad Nacional de Avellaneda | www.undav.edu.ar