El documento explica el patrón arquitectónico MVC (Modelo Vista Controlador), el cual separa la lógica de negocio de la interfaz de usuario. Describe cada componente y cómo interactúan, incluyendo ejemplos de código. También brinda recomendaciones sobre la estructura y organización de directorios para aplicaciones que sigan este patrón.
PAYTPV Plataforma Integral de Cobros - VIII Betabeers Bilbao 27/02/2015
Taller MVC
1. Universidad Nacional de Avellaneda | www.undav.edu.ar Betabeers Buenos Aires | 30 de Marzo de 2012
Patrón arquitectónico:
“ Plantilla
que define la
estructura de un
MVC
Sistema y las
normas de
organización para
construir el
Software PATRÓN ARQUITECTÓNICO
Entendiendo el
patrón arquitectónico
MVC @eugeniabahit
2. Universidad Nacional de Avellaneda | www.undav.edu.ar Betabeers Buenos Aires | 30 de Marzo de 2012
Modelo, vista, controlador:
“ Patrón
Arquitectónico
que define la
MVC
estructura de un
sistema, separando
la lógica de
negocio de la
interfaz de usuario MODEL-VIEW-CONTROLLER
Entendiendo el
patrón arquitectónico
MVC @eugeniabahit
3. Universidad Nacional de Avellaneda | www.undav.edu.ar Betabeers Buenos Aires | 30 de Marzo de 2012
¿Cómo funciona?
De lo general a lo particular y de lo particular al detalle
Entendiendo el
patrón arquitectónico
MVC @eugeniabahit
4. Universidad Nacional de Avellaneda | www.undav.edu.ar Betabeers Buenos Aires | 30 de Marzo de 2012
Generalidades...
Entendiendo el
patrón arquitectónico
MVC @eugeniabahit
5. Universidad Nacional de Avellaneda | www.undav.edu.ar Betabeers Buenos Aires | 30 de Marzo de 2012
1
Petición Contacta
CONTROLADOR
3 2
5 MODELO
Muestra Retorna
Entrega
VISTA
4
Entendiendo el
patrón arquitectónico
MVC @eugeniabahit
6. Universidad Nacional de Avellaneda | www.undav.edu.ar Betabeers Buenos Aires | 30 de Marzo de 2012
Particularidades...
Entendiendo el
patrón arquitectónico
MVC @eugeniabahit
7. Universidad Nacional de Avellaneda | www.undav.edu.ar Betabeers Buenos Aires | 30 de Marzo de 2012
Petición
CONTROLADOR
Handler Recibe las peticiones del usuario
Analiza y transforma la información
Helper recibida
Instancia al modelo
Modifica las propiedades del modelo
Llama al método correspondiente
Entendiendo el
patrón arquitectónico
MVC @eugeniabahit
8. Universidad Nacional de Avellaneda | www.undav.edu.ar Betabeers Buenos Aires | 30 de Marzo de 2012
Contacta
CONTROLADOR
Capa de abstracción
(core de la App)
Se conecta a la
base de datos,
retornando al
modelo, una
MODELO matriz con los
Retorna datos obtenidos
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.
Entendiendo el
patrón arquitectónico
MVC @eugeniabahit
9. Universidad Nacional de Avellaneda | www.undav.edu.ar Betabeers Buenos Aires | 30 de Marzo de 2012
Lógica CONTROLADOR
Da formato /
transforma la
información recibida
VISTA
Entrega
GUI
Renderiza la información formateada en la GUI y la muestra al usuario
Entendiendo el
patrón arquitectónico
MVC @eugeniabahit
10. Universidad Nacional de Avellaneda | www.undav.edu.ar Betabeers Buenos Aires | 30 de Marzo de 2012
Detalles...
Entendiendo el
patrón arquitectónico
MVC @eugeniabahit
11. Universidad Nacional de Avellaneda | www.undav.edu.ar Betabeers Buenos Aires | 30 de Marzo de 2012
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
}
}
Entendiendo el
patrón arquitectónico
MVC @eugeniabahit
12. Universidad Nacional de Avellaneda | www.undav.edu.ar Betabeers Buenos Aires | 30 de Marzo de 2012
Requerida por el class DBAbstractLayer {
Modelo
// propiedades
// ....
// conecta a la base de datos
Capa de abstracción
// 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
}
}
Entendiendo el
patrón arquitectónico
MVC @eugeniabahit
13. Universidad Nacional de Avellaneda | www.undav.edu.ar Betabeers Buenos Aires | 30 de Marzo de 2012
Handler CONTROLADOR
// handler
$controller = new PersonaController(); class PersonaController {
switch ($peticion) {
case 'agregar-persona': public function agregar() {
$controller->agregar();
Break; // verifica, filtra y analiza la data recibida
// .... $data = helper_validar_data_persona();
}
// instanciar al modelo
$persona = new Persona();
// modificar propiedades del modelo
Helper $persona->nombre = $data['nombre'];
$persona->apellido = $data['apellido'];
function helper_validar_persona() {
if(isset($_POST)) { // llamar al método correspndiente
// filtrar datos... $result = $persona->set_persona();
// return $datos_filtrados
}
} // enviar datos a la vista
$vista = new PersonaView();
$vista->mostrar_msg_nueva_persona($result);
}
}
Entendiendo el
patrón arquitectónico
MVC @eugeniabahit
14. Universidad Nacional de Avellaneda | www.undav.edu.ar Betabeers Buenos Aires | 30 de Marzo de 2012
<!doctype html>
<head>
VISTA <title>Agregar Persona</title>
<!--
…
-->
GUI </head>
<body>
<h1>Agregar Persona</h1>
<p class='system_msg'>[[MENSAJE]]</p>
<!--
…
-->
</body>
</html>
Entendiendo el
patrón arquitectónico
MVC @eugeniabahit
15. Universidad Nacional de Avellaneda | www.undav.edu.ar Betabeers Buenos Aires | 30 de Marzo de 2012
Lógica class PersonaView {
public function mostrar_msg_nueva_persona($result) {
VISTA // 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;
}
}
Entendiendo el
patrón arquitectónico
MVC @eugeniabahit
16. Universidad Nacional de Avellaneda | www.undav.edu.ar Betabeers Buenos Aires | 30 de Marzo de 2012
¿Cómo organizar la
estructura de la App?
Normas básicas para optimizar la estructura
Entendiendo el
patrón arquitectónico
MVC @eugeniabahit
17. Universidad Nacional de Avellaneda | www.undav.edu.ar Betabeers Buenos Aires | 30 de Marzo de 2012
“ Mantener
una estructura de
directorios limpia y
con coherencia
[-] mi-aplicacion
[+] core
[-] modulo-a
[+] modelos
[+] vistas
[+] controladores
lógica [-] modulo-b
[+] modelos
[+] vistas
[+] controladores
Entendiendo el
patrón arquitectónico
MVC @eugeniabahit
18. Universidad Nacional de Avellaneda | www.undav.edu.ar Betabeers Buenos Aires | 30 de Marzo de 2012
“ Un archivo
por cada modelo.
El nombre del
archivo, igual al
[-] mi-aplicacion
[+] core
[-] modulo-a
[-] modelos
persona.php
usuario.php
nombre del modelo [+] vistas
[+] controladores
[-] modulo-b
[+] modelos
producto.php
[+] vistas
[+] controladores
Entendiendo el
patrón arquitectónico
MVC @eugeniabahit
19. Universidad Nacional de Avellaneda | www.undav.edu.ar Betabeers Buenos Aires | 30 de Marzo de 2012
“ Crear
un controlador
para cada modelo
[-] mi-aplicacion
[+] core
[-] modulo-a
[-] modelos
persona.php
usuario.php
[+] vistas
[-] controladores
persona.php
usuario.php
Entendiendo el
patrón arquitectónico
MVC @eugeniabahit
20. Universidad Nacional de Avellaneda | www.undav.edu.ar Betabeers Buenos Aires | 30 de Marzo de 2012
“ 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
Entendiendo el
patrón arquitectónico
MVC @eugeniabahit
21. Universidad Nacional de Avellaneda | www.undav.edu.ar Betabeers Buenos Aires | 30 de Marzo de 2012
“ Colocar
archivos estáticos
en un directorio
independiente
[-] mi-aplicacion
[+] modulo-a
[-] static
[-] html
persona.html
usuario.html
plantilla_base.html
[+] css
[+] img
[+] js
Entendiendo el
patrón arquitectónico
MVC @eugeniabahit
22. Universidad Nacional de Avellaneda | www.undav.edu.ar Betabeers Buenos Aires | 30 de Marzo de 2012
“ Helpers y
Handlers deben ir
en el directorio del
módulo
[-] mi-aplicacion
[+] core
[-] modulo-a
[+] modelos
[+] vistas
[+] controladores
correspondiente helpers.php
handler.php
Entendiendo el
patrón arquitectónico
MVC @eugeniabahit
23. Betabeers Buenos Aires | 30 de Marzo de 2012
“
Universidad Nacional de Avellaneda | www.undav.edu.ar
Librerías
funciones genéricas [-] mi-aplicacion
y todo dato [+] core
[-] libs
reutilizable, PHPTemplate.php
siempre deben DBConn.php
pertenecer al core FormValidate.php
PHPAggregateFuncs.php
de la App [+] orm
constantes.php
settings.php
Entendiendo el
patrón arquitectónico
MVC @eugeniabahit
24. Universidad Nacional de Avellaneda | www.undav.edu.ar Betabeers Buenos Aires | 30 de Marzo de 2012
Pero por sobre todo,
NO TE OLVIDES DE
UN PRINCIPIO
BÁSICO...
Entendiendo el
patrón arquitectónico
MVC @eugeniabahit
25. Universidad Nacional de Avellaneda | www.undav.edu.ar Betabeers Buenos Aires | 30 de Marzo de 2012
Keep It Simple, S...!
¡Gracias!
Entendiendo el
patrón arquitectónico
MVC @eugeniabahit
26. Universidad Nacional de Avellaneda | www.undav.edu.ar Betabeers Buenos Aires | 30 de Marzo de 2012
¡Soy un documento libre!
Descargame en:
http://taller-de-php.eugeniabahit.com
DISTRIBUIME, COPIAME Y MODIFICAME COMO QUIERAS
SE LIBRE COMO
EN LIBERTAD
Entendiendo el
patrón arquitectónico
MVC @eugeniabahit