Betabeers Buenos Aires | 30 de Marzo de 2012
Entendiendo elpatrón arquitectónico
MVC @eugeniabahit
PATRÓN ARQUITECTÓNICO
Plantillaque 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
Betabeers Buenos Aires | 30 de Marzo de 2012
Entendiendo elpatrón arquitectónico
MVC @eugeniabahit
MODEL-VIEW-CONTROLLER
PatrónArquitectó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
Betabeers Buenos Aires | 30 de Marzo de 2012
Entendiendo elpatró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
Betabeers Buenos Aires | 30 de Marzo de 2012
Entendiendo elpatrón arquitectónico
MVC @eugeniabahit
Generalidades...
Universidad Nacional de Avellaneda | www.undav.edu.ar
Betabeers Buenos Aires | 30 de Marzo de 2012
Entendiendo elpatrón arquitectónico
MVC @eugeniabahit
Petición
VISTA
Contacta
RetornaMODELO
CONTROLADOR
Entrega
Muestra
1
23
4
5
Universidad Nacional de Avellaneda | www.undav.edu.ar
Betabeers Buenos Aires | 30 de Marzo de 2012
Entendiendo elpatrón arquitectónico
MVC @eugeniabahit
Particularidades...
Universidad Nacional de Avellaneda | www.undav.edu.ar
Betabeers Buenos Aires | 30 de Marzo de 2012
Entendiendo elpatrón arquitectónico
MVC @eugeniabahit
PeticiónCONTROLADOR
Recibe las peticiones del usuarioHandler
Analiza y transforma la información recibidaHelper
Instancia al modelo
Modifica las propiedades del modelo
Llama al método correspondiente
Universidad Nacional de Avellaneda | www.undav.edu.ar
ContactaCONTROLADOR
RetornaMODELO
Se conecta a la base de datos,
retornando al modelo, una
matriz con los datos obtenidos
Betabeers Buenos Aires | 30 de Marzo de 2012
Entendiendo elpatró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
Betabeers Buenos Aires | 30 de Marzo de 2012
Entendiendo elpatró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
Betabeers Buenos Aires | 30 de Marzo de 2012
Entendiendo elpatrón arquitectónico
MVC @eugeniabahit
Detalles...
Universidad Nacional de Avellaneda | www.undav.edu.ar
Betabeers Buenos Aires | 30 de Marzo de 2012
Entendiendo elpatró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
Betabeers Buenos Aires | 30 de Marzo de 2012
Entendiendo elpatrón arquitectónico
MVC @eugeniabahit
Requerida por elModelo
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
Betabeers Buenos Aires | 30 de Marzo de 2012
Entendiendo elpatró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
Betabeers Buenos Aires | 30 de Marzo de 2012
Entendiendo elpatrón arquitectónico
MVC @eugeniabahit
VISTA
GUI
<!doctype html><head>
<title>Agregar Persona</title><!--
… -->
</head>
<body><h1>Agregar Persona</h1><p class='system_msg'>[[MENSAJE]]</p><!--
… -->
</body>
</html>
Universidad Nacional de Avellaneda | www.undav.edu.ar
VISTA
Lógica class PersonaView {
public function mostrar_msg_nueva_persona($result) {// formateo los datos recibidosif($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 formateadaecho $html;
}}
Betabeers Buenos Aires | 30 de Marzo de 2012
Entendiendo elpatrón arquitectónico
MVC @eugeniabahit
Universidad Nacional de Avellaneda | www.undav.edu.ar
Betabeers Buenos Aires | 30 de Marzo de 2012
Entendiendo elpatró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
Betabeers Buenos Aires | 30 de Marzo de 2012
Entendiendo elpatrón arquitectónico
MVC @eugeniabahit
Universidad Nacional de Avellaneda | www.undav.edu.ar
Manteneruna estructura de
directorios limpia y con coherencia
lógica
“ [-] mi-aplicacion
[+] core
[-] modulo-a
[+] modelos
[+] vistas
[+] controladores
[-] modulo-b
[+] modelos
[+] vistas
[+] controladores
Betabeers Buenos Aires | 30 de Marzo de 2012
Entendiendo elpatrón arquitectónico
MVC @eugeniabahit
Universidad Nacional de Avellaneda | www.undav.edu.ar
Un archivopor 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
Betabeers Buenos Aires | 30 de Marzo de 2012
Entendiendo elpatrón arquitectónico
MVC @eugeniabahit
Universidad Nacional de Avellaneda | www.undav.edu.ar
Crearun controlador
para cada modelo“ [-] mi-aplicacion
[+] core
[-] modulo-a
[-] modelos
persona.php
usuario.php
[+] vistas
[-] controladores
persona.php
usuario.php
Betabeers Buenos Aires | 30 de Marzo de 2012
Entendiendo elpatrón arquitectónico
MVC @eugeniabahit
Universidad Nacional de Avellaneda | www.undav.edu.ar
Crearuna vista para
cada modelo“ [-] mi-aplicacion
[+] core
[-] modulo-a
[-] modelos
persona.php
usuario.php
[-] vistas
persona.php
usuario.php
[-] controladores
persona.php
usuario.php
Betabeers Buenos Aires | 30 de Marzo de 2012
Entendiendo elpatrón arquitectónico
MVC @eugeniabahit
Universidad Nacional de Avellaneda | www.undav.edu.ar
Colocararchivos estáticos
en un directorio independiente
“ [-] mi-aplicacion
[+] modulo-a
[-] static
[-] html
persona.html
usuario.html
plantilla_base.html
[+] css
[+] img
[+] js
Betabeers Buenos Aires | 30 de Marzo de 2012
Entendiendo elpatrón arquitectónico
MVC @eugeniabahit
Universidad Nacional de Avellaneda | www.undav.edu.ar
Helpers yHandlers deben ir
en el directorio del módulo
correspondiente
“ [-] mi-aplicacion
[+] core
[-] modulo-a
[+] modelos
[+] vistas
[+] controladores
helpers.php
handler.php
Betabeers Buenos Aires | 30 de Marzo de 2012
Entendiendo elpatrón arquitectónico
MVC @eugeniabahit
Universidad Nacional de Avellaneda | www.undav.edu.ar
Libreríasfunciones 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
Betabeers Buenos Aires | 30 de Marzo de 2012
Entendiendo elpatrón arquitectónico
MVC @eugeniabahit
Pero por sobre todo,
NO TE OLVIDES DEUN PRINCIPIO
BÁSICO...
Universidad Nacional de Avellaneda | www.undav.edu.ar
Betabeers Buenos Aires | 30 de Marzo de 2012
Entendiendo elpatrón arquitectónico
MVC @eugeniabahit
Universidad Nacional de Avellaneda | www.undav.edu.ar
Keep It Simple, S...!Keep It Simple, S...!
¡Gracias!
Betabeers Buenos Aires | 30 de Marzo de 2012
Entendiendo elpatró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 COMOEN LIBERTAD
Universidad Nacional de Avellaneda | www.undav.edu.ar