SlideShare uma empresa Scribd logo
1 de 64
Baixar para ler offline
Bloque II: Patrones de diseño
                1. ¿Qué son los patrones de diseño?
                2. El patrón Singleton
                3. El patrón Registry
                4. El patrón Factory
                5. El patrón Decorator
                6. El patrón Observer
                7. El patrón Front Controller
                8. El patrón MVC




Desarrollo web avanzado con PHP5
Bloque II: Patrones de diseño
                1. ¿Qué son los patrones de diseño?
                2. El patrón Singleton
                3. El patrón Registry
                4. El patrón Factory
                5. El patrón Decorator
                6. El patrón Observer
                7. El patrón Front Controller
                8. El patrón MVC




Desarrollo web avanzado con PHP5
2.1. ¿Qué son los patrones de diseño?




      Son soluciones a problemas cotidianos, son independientes de la
      tecnología utilizada y permiten crear un argot común.




Desarrollo web avanzado con PHP 5                     Bloque II: Patrones de diseño
2.1. ¿Qué son los patrones de diseño?


  Un poco de historia:

  ● En 1977 Christopher Alexander aplica en concepto de patrón
  (“pattern”) a la arquitectura.

  ●En 1987 Kent Beck y Ward Cunningham se plantean aplicar
  este concepto de patrón al sofware

  ●En 1994 se publica “Design Patterns: Elements of Reusable
  Object-Oriented Software” por la Gang Of Four (Erich Gamma,
  Richard Helm, Ralph Johnson, John Vlissides)



Desarrollo web avanzado con PHP 5                    Bloque II: Patrones de diseño
Bloque II: Patrones de diseño
                1. ¿Qué son los patrones de diseño?
                2. El patrón Singleton
                3. El patrón Registry
                4. El patrón Factory
                5. El patrón Decorator
                6. El patrón Observer
                7. El patrón Front Controller
                8. El patrón MVC




Desarrollo web avanzado con PHP5
2.2. El patrón Singleton


   Problema

    Tener acceso a un recurso único que nunca sea duplicado y que
    además esté disponible en cualquier parte de la aplicación, sin
    tener que preocuparse de su existencia.




Desarrollo web avanzado con PHP 5                     Bloque II: Patrones de diseño
2.2. El patrón Singleton


   Ejemplo

    Necesitar instanciar un objeto que nos de acceso a la base de
    datos, pero que nos devuelva siempre la misma conexión.




Desarrollo web avanzado con PHP 5                     Bloque II: Patrones de diseño
2.2. El patrón Singleton
  Implementación
   class DB{
     private static $singleton;
     private $connection;
     private function __construct(){
            $this­>conection = mysql_connect();

      }
     public static function getInstance(){
       if(is_null(self::$singleton){
         self::$singleton = new DB();
       }
       return self::$singleton;
     }
   }

Desarrollo web avanzado con PHP 5                 Bloque II: Patrones de diseño
Bloque II: Patrones de diseño
                1. ¿Qué son los patrones de diseño?
                2. El patrón Singleton
                3. El patrón Registry
                4. El patrón Factory
                5. El patrón Decorator
                6. El patrón Observer
                7. El patrón Front Controller
                8. El patrón MVC




Desarrollo web avanzado con PHP5
2.3. El patrón Registry


   Problema

    Permitir que cualquier objeto sea usado como un Singleton sin
    necesidad de especificarlo directamente en su constructor




Desarrollo web avanzado con PHP 5                     Bloque II: Patrones de diseño
2.3. El patrón Registry


   Ejemplo

    Crear un objeto que sea una base de datos que se pueda
    recuperar como si fuera un singleton.




Desarrollo web avanzado con PHP 5                   Bloque II: Patrones de diseño
2.3. El patrón Registry


   Implementacion
    class Registry{
      private static $register;

      public static function add($item){
          if(is_object($item)){
              $name = get_class($item);
        }else{
              throw new Exception('Objeto incorrecto');
        }
        self::$register[$name] = $item;
      }


Desarrollo web avanzado con PHP 5                         Bloque II: Patrones de diseño
2.3. El patrón Registry


   Implementación (continuación)

      public static function get($name){
         if(array_key_exists($name, self::$register)){
          return self::$register[$name];
        }else{
                  throw new Exception('Clase no registrada');
        }
      }
    }




Desarrollo web avanzado con PHP 5                          Bloque II: Patrones de diseño
Bloque II: Patrones de diseño
                1. ¿Qué son los patrones de diseño?
                2. El patrón Singleton
                3. El patrón Registry
                4. El patrón Factory
                5. El patrón Decorator
                6. El patrón Observer
                7. El patrón Front Controller
                8. El patrón MVC




Desarrollo web avanzado con PHP5
2.4. El patrón Factory


   Problema

    Necesitamos instanciar una o más clases especializadas que se
    encargan de hacer la misma tarea.




Desarrollo web avanzado con PHP 5                   Bloque II: Patrones de diseño
2.4. El patrón Factory


   Ejemplo

    Necesitamos cargar los parámetros de configuración de nuestra
    aplicación, pero estos podrán provenir de un XML o un archivo en
    PHP.




Desarrollo web avanzado con PHP 5                     Bloque II: Patrones de diseño
2.4. El patrón Factory


   Solución




Desarrollo web avanzado con PHP 5   Bloque II: Patrones de diseño
Bloque II: Patrones de diseño
                1. ¿Qué son los patrones de diseño?
                2. El patrón Singleton
                3. El patrón Registry
                4. El patrón Factory
                5. El patrón Decorator
                6. El patrón Observer
                7. El patrón Front Controller
                8. El patrón MVC




Desarrollo web avanzado con PHP5
2.5. El patrón Decorator


   Problema

    Permitir herencia múltiple evitando que el árbol de clases crezca
    de manera desmesurada.




Desarrollo web avanzado con PHP 5                      Bloque II: Patrones de diseño
2.5. El patrón Decorator
   Ejemplo
    Estamos programando un juego de estrategia y creamos una
    clase “Tile” (tesela) para el mapa. Cada tesela permite una
    velocidad.


                                    abstract class Tile{

                                      abstract function getSpeed();
                                    }




Desarrollo web avanzado con PHP 5                      Bloque II: Patrones de diseño
2.5. El patrón Decorator
   Ejemplo
    Para crear una “Montaña” (Mountain) bastará con esto


                class Mountain extends Tile{
                  private $speed = 10;

                  function getSpeed(){
                    return $this­>speed;
                  }
                }




Desarrollo web avanzado con PHP 5                    Bloque II: Patrones de diseño
2.5. El patrón Decorator
   Ejemplo
    Y si queremos que la montaña esté congelada


     class FrozenMountain extends Mountain{

       function getSpeed(){
         return parent::getSpeed() + 2;
       }
     }




Desarrollo web avanzado con PHP 5                 Bloque II: Patrones de diseño
2.5. El patrón Decorator
   Ejemplo
    Y si ahora queremos que la montaña esté embarrada


     class MuddyMountain extends class Mountain{

       function getMoveRate(){
         return parent::getSpeed() ­ 2;
       }
     }




Desarrollo web avanzado con PHP 5                  Bloque II: Patrones de diseño
2.5. El patrón Decorator
   Ejemplo
    Y si necesitamos una montaña embarrada y congelada

    Y si ahora también tenemos explanadas

    Y si también pueden estar atravesadas por ríos

    ...




Desarrollo web avanzado con PHP 5                    Bloque II: Patrones de diseño
2.5. El patrón Decorator
   Ejemplo




Desarrollo web avanzado con PHP 5   Bloque II: Patrones de diseño
2.5. El patrón Decorator
   Implementación
    El secreto para resolver correctamente este problema se basa en
    delegar responsibilidades.

    Seguimos manteniendo las primeras clases del árbol


     class Mountain extends class Tile{
       private $speed = 10;

       function getMoveRate(){
         return $this­>speed;
       }
                                       abstract class Tile{
     }
                                         abstract function getSpeed();
                                       }

Desarrollo web avanzado con PHP 5                    Bloque II: Patrones de diseño
2.5. El patrón Decorator
   Implementación
    Creamos una nueva clase encargada de “decorar”

     abstract class TileDecorator extends Tile{

       protected $tile;

       function __construct(Tile $tile){
        $this­>tile = $tile;
       }
     }




Desarrollo web avanzado con PHP 5                    Bloque II: Patrones de diseño
2.5. El patrón Decorator
   Implementación
    Redefinimos nuestras clases “Congelada” y “Embarrada”

     class MuddyDecorator extends TileDecorator{

       function getSpeed(){
        return $this­>tile­>getSpeed()­2;
       }
     }




Desarrollo web avanzado con PHP 5                  Bloque II: Patrones de diseño
2.5. El patrón Decorator
   Implementación
    Redefinimos nuestras clases “Congelada” y “Embarrada”

     class FrozenDecorator extends TileDecorator{

       function getSpeed(){
        return $this­>tile­>getSpeed()+2;
       }
     }




Desarrollo web avanzado con PHP 5                  Bloque II: Patrones de diseño
2.5. El patrón Decorator
   Implementación
    Creando una Montaña Congelada

     $tile = new FrozenDecorator(
                   new Mountain()
             );

     return $title­>getSpeed() // 12




Desarrollo web avanzado con PHP 5      Bloque II: Patrones de diseño
2.5. El patrón Decorator
   Implementación
    Creando una explanada congelada y embarrada

     $tile = new MuddyDecorator(
                   new FrozenDecorator(
                         new Plain()
                   )
             );

     return $title­>getSpeed() // 10




Desarrollo web avanzado con PHP 5                 Bloque II: Patrones de diseño
2.5. El patrón Decorator
   Implementación




Desarrollo web avanzado con PHP 5   Bloque II: Patrones de diseño
Bloque II: Patrones de diseño
                1. ¿Qué son los patrones de diseño?
                2. El patrón Singleton
                3. El patrón Registry
                4. El patrón Factory
                5. El patrón Decorator
                6. El patrón Observer
                7. El patrón Front Controller
                8. El patrón MVC




Desarrollo web avanzado con PHP5
2.6. El patrón Observer


   Problema

    Una clase adquiere responsabilidades que no le son específicas
    como consecuencia de un evento que sucede en su interior




Desarrollo web avanzado con PHP 5                    Bloque II: Patrones de diseño
2.6. El patrón Observer

   Ejemplo
    Consideremos una clase responsable del acceso de usuarios al
    sistema




Desarrollo web avanzado con PHP 5                   Bloque II: Patrones de diseño
2.6. El patrón Observer

   Ejemplo
    class Login{
      const LOGIN_GRANTED = 1;
      const LOGIN_DENIED  = 2;
      private $status = array();
      public function handleLogin($user, $pass, $ip){
        switch(rand(1,2)){
            case 1:
                $this­>setStatus(self::LOGIN_GRANTED, $user, $ip);
                $ret = true;
                break;
            case 2:
                $this­>setStatus(self::LOGIN_DENIED, $user, $ip);
                $ret = false;
                break;
        }
         return $ret;
      }
    }

Desarrollo web avanzado con PHP 5                        Bloque II: Patrones de diseño
2.6. El patrón Observer

   Ejemplo
    La clase Login tendría además su correspondiente getter y setter
    del atributo status
     class Login{

       // … codigo anterior

       public function getStatus(){
         return $this­>status;
       }

       public function setStatus($status, $user, $ip){
         $this­>status = array($status, $user, $ip);
       }
     }



Desarrollo web avanzado con PHP 5                        Bloque II: Patrones de diseño
2.6. El patrón Observer

   Ejemplo
    A las dos semanas de empezar a desarrollar el proyecto nos
    hacen una ampliación de los requisitos


     Necesitamos que cada vez que un usuario intente acceder al sistema se registre su
     ip de acceso




Desarrollo web avanzado con PHP 5                                Bloque II: Patrones de diseño
2.6. El patrón Observer

   Ejemplo
    class Login{

      // … codigo

      public function handleLogin($user, $pass, $ip){
       switch(rand(1,2)){
           // … código
        }

        Logger::logIP($user, $ip, $this­>getStatus());

        return $ret;
      }
    }



Desarrollo web avanzado con PHP 5                 Bloque II: Patrones de diseño
2.6. El patrón Observer

   Ejemplo
    Un mes después, la ampliación de requisitos continúa



     En caso de un intento de login fallido necesitamos que el sistema envíe un email
     de notificación




Desarrollo web avanzado con PHP 5                                 Bloque II: Patrones de diseño
2.6. El patrón Observer

   Ejemplo
    class Login{
      // … codigo
      public function handleLogin($user, $pass, $ip){
        switch(rand(1,2)){
           // … código
        }

        Logger::logIP($user, $ip, $this­>getStatus());

        if(!$ret){
           Notifier::mailWarning($user, $ip, $this­>getStatus());
        }

        return $ret;
      }
    }

Desarrollo web avanzado con PHP 5                  Bloque II: Patrones de diseño
2.6. El patrón Observer

   Ejemplo
    Tras quince días de calma, vuelven a solicitar nuevos cambios



     Necesitamos añadir una cookie a aquellos usurios que sí que consigan acceder al
     sistema.




Desarrollo web avanzado con PHP 5                               Bloque II: Patrones de diseño
2.6. El patrón Observer

   Implementación
    Desenganchamos los elementos clientes (observadores) de la
    clase central (observable o sujeto).

    Los observadores son notificados por el sujeto de qué evento
    tiene lugar




Desarrollo web avanzado con PHP 5                     Bloque II: Patrones de diseño
2.6. El patrón Observer

   Implementación
    La interfaz “IObservable”

     interface IObservable {

       function attach(Observer $observer);

       function detach(Observer $observer);

       function notify();

     }




Desarrollo web avanzado con PHP 5             Bloque II: Patrones de diseño
2.6. El patrón Observer

   Implementación
    class Observable implements IObservable {
      private $observers;

      function attach(Observer $observer){
        $this­>observers[] = $observer;
      };

      function detach(Observer $observer){
        $key = array_search($this­>observers, $observer);
        unset($this­>observers[$key]);
      };

      function notify(){
        foreach($this­>observers as $observer){
          $observer­>update($this);
        }
      }
    }

Desarrollo web avanzado con PHP 5                       Bloque II: Patrones de diseño
2.6. El patrón Observer

   Implementación
    La interfaz “IObserver”

     interface IObserver {

       function update(Observable $observable);

     }




Desarrollo web avanzado con PHP 5                 Bloque II: Patrones de diseño
2.6. El patrón Observer

   Implementación
    class Login extends Observable{
      // … codigo
      public function handleLogin($user, $pass, $ip){
        switch(rand(1,2)){
           // … código
        }

        $this­>notify();

        return $ret;
      }
    }




Desarrollo web avanzado con PHP 5                 Bloque II: Patrones de diseño
2.6. El patrón Observer

   Implementación
    A las dos semanas de empezar a desarrollar el proyecto nos
    hacen una ampliación de los requisitos


     Necesitamos que cada vez que un usuario intente acceder al sistema se registre su
     ip de acceso




Desarrollo web avanzado con PHP 5                                Bloque II: Patrones de diseño
2.6. El patrón Observer

   Implementación
    class Logger implements Observer {

      // otro código 

      function update(Observable $observable){
        $this­>log($observable­>getStatus());
      };

    }

    $login = new Login();
    $login­>attach(Logger::getInstance());




Desarrollo web avanzado con PHP 5                Bloque II: Patrones de diseño
Bloque II: Patrones de diseño
                1. ¿Qué son los patrones de diseño?
                2. El patrón Singleton
                3. El patrón Registry
                4. El patrón Factory
                5. El patrón Decorator
                6. El patrón Observer
                7. El patrón Front Controller
                8. El patrón MVC




Desarrollo web avanzado con PHP5
2.7. El patrón Front Controller


   Problema

    Proporcionar un único punto de entrada para todas las peticiones




Desarrollo web avanzado con PHP 5                     Bloque II: Patrones de diseño
2.7. El patrón Front Controller


   Solución

    Todas las peticiones deben ser procesadas por un único script,
    por ejemplo index.php




Desarrollo web avanzado con PHP 5                     Bloque II: Patrones de diseño
2.7. El patrón Front Controller


   Ejemplo

    Tenemos una web muy simple formada por tres pantalla: Inicio,
    Servicios y Contacto.




Desarrollo web avanzado con PHP 5                    Bloque II: Patrones de diseño
2.7. El patrón Front Controller


   Solución

    // index.php
    $page = isset($_GET['page'])?_GET['page']:'inicio'; 

    include('pages/'.$page.'.php'); 




Desarrollo web avanzado con PHP 5         Bloque II: Patrones de diseño
2.7. El patrón Front Controller


   URL Amigables


                   http://www.midominio.com/producto.php?id=1

                                        vs

            http://www.midominio.com/producto/mac-book-pro-13

                               nos conformaremos con

     http://www.midominio.com/index.php?/producto/mac-book-pro-13


Desarrollo web avanzado con PHP 5                      Bloque II: Patrones de diseño
Bloque II: Patrones de diseño
                1. ¿Qué son los patrones de diseño?
                2. El patrón Singleton
                3. El patrón Registry
                4. El patrón Factory
                5. El patrón Decorator
                6. El patrón Observer
                7. El patrón Front Controller
                8. El patrón MVC




Desarrollo web avanzado con PHP5
2.8. El patrón MVC
   El patrón MVC para una aplicación web




       Controlador
       Responde a las
       peticiones del usuario y
       actuando de “pegamento”
       entre modelo y vista
                                           Vista
                                           Muestra la información
                                           del modelo, normalmente
       Modelo                              HTML
       Representa la
       información sobre la que
       opera la aplicación



Desarrollo web avanzado con PHP 5           Bloque II: Patrones de diseño
2.8. El patrón MVC
   Un ejemplo, listando los artículos de un blog
   <?php

   // Conectando con la base de datos

   try{
      $dbh = new PDO(
                'mysql:host=server.flai.es;dbname=curso_php_blog',
                'curso',
                'curso_2010');

   echo "Conexion correcta";

   }catch (Exception $e){
      echo "Error: ".$e­>getMessage();
      die();
   }

Desarrollo web avanzado con PHP 5                  Bloque II: Patrones de diseño
2.8. El patrón MVC
   Un ejemplo, listando los artículos de un blog
   // Ejecutando la SQL

   $stm = $dbh­>prepare(
     'SELECT title, created_at 
      FROM article 
      ORDER BY created_at 
      DESC LIMIT 10');

   $stm­>execute();

   $results = $stm­>fetchAll();

   ?>




Desarrollo web avanzado con PHP 5                  Bloque II: Patrones de diseño
2.8. El patrón MVC
   Un ejemplo, listando los artículos de un blog
   <html> 
     <head> 
       <title>Listado de articulos</title> 
     </head> 
     <body> 
      <h1>Listado de articulos</h1> 
      <table> 
        <tr><th>Date</th><th>Title</th></tr> 
   <?php 
   foreach($results as $result) 
   { 
   echo "t<tr>n"; 
   printf("tt<td> %s </td>n", $result['created_at']); 
   printf("tt<td> %s </td>n", $result['title']); 
   echo "t</tr>n"; 
   } 
   ?> 
       </table> 
     </body> 
   </html>

Desarrollo web avanzado con PHP 5                           Bloque II: Patrones de diseño
2.8. El patrón MVC
   Mejorando el código
   try{
      $dbh = new PDO('dsn';
   }catch (Exception $e){
      die("Error: ".$e­>getMessage();
   }

   $stm = $dbh­>prepare('SELECT * FROM article LIMIT 10');
   $stm­>execute();
   $articles = $stm­>fetchAll();

   unset($dbh);

   require('view.php');




Desarrollo web avanzado con PHP 5                 Bloque II: Patrones de diseño
2.8. El patrón MVC
   Mejorando el código (archivo view.php)
   <html>
     <head>
       <title>Listado de artículos</title>
     </head>
     <body>
       <h1>Listado de artículos</h1>
       <table>
         <tr><th>Fecha</th><th>Titulo</th></tr>
       <?php foreach ($articles as $article): ?>
         <tr>
           <td><?php echo $article['created_at'] ?></td>
           <td><?php echo $article['title'] ?></td>
         </tr>
       <?php endforeach; ?>
       </table>
     </body>
   </html>

Desarrollo web avanzado con PHP 5                          Bloque II: Patrones de diseño
2.8. El patrón MVC
   Mejorando el código aún más (index.php)
   <?php

   require('model.php');

   $articles = getAllArticles();

   require('view.php');

   ?>




Desarrollo web avanzado con PHP 5            Bloque II: Patrones de diseño
2.8. El patrón MVC
   Mejorando el código aún más (model.php)
   function connect($dsn){
     try{
       $dbh = new PDO($dsn);
     }catch (Exception $e){
       die("Error: ".$e­>getMessage());
     }
     return $dbh;
   }

   function getAllArticles(){
     $dbh = connect($dsn);
     $stm = $dbh­>prepare('SELECT * FROM article');
     $stm­>execute();
     $articles = $stm­>fetchAll();
     unset($dbh);
     return $articles;
   }


Desarrollo web avanzado con PHP 5                     Bloque II: Patrones de diseño

Mais conteúdo relacionado

Mais procurados

Iniciación PHP 5. Programación Orientada a Objetos
Iniciación PHP 5. Programación Orientada a ObjetosIniciación PHP 5. Programación Orientada a Objetos
Iniciación PHP 5. Programación Orientada a ObjetosRightster
 
Symfony2 Formacion y primeros pasos
Symfony2  Formacion y primeros pasosSymfony2  Formacion y primeros pasos
Symfony2 Formacion y primeros pasosSoni BM
 
Symfony2: Framework para PHP5
Symfony2: Framework para PHP5Symfony2: Framework para PHP5
Symfony2: Framework para PHP5Raul Fraile
 
Mi primer programa en Symfony2
Mi primer programa en Symfony2Mi primer programa en Symfony2
Mi primer programa en Symfony2César Hernández
 
Las buenas prácticas oficiales para aplicaciones Symfony
Las buenas prácticas oficiales para aplicaciones SymfonyLas buenas prácticas oficiales para aplicaciones Symfony
Las buenas prácticas oficiales para aplicaciones Symfonysymfony_bcn
 
Symfony2: Interacción con CSS, JS y HTML5
Symfony2: Interacción con CSS, JS y HTML5Symfony2: Interacción con CSS, JS y HTML5
Symfony2: Interacción con CSS, JS y HTML5Raul Fraile
 
desarrolo de sitios web php y mysql
desarrolo de sitios web php y mysqldesarrolo de sitios web php y mysql
desarrolo de sitios web php y mysqlJuan Timoteo Cori
 
Programacion Orientada a Objetos en php
Programacion Orientada a Objetos en phpProgramacion Orientada a Objetos en php
Programacion Orientada a Objetos en phpSamuel Piñon Garcia
 
Desarrollo Web Ágil con Symfony, Bootstrap y Angular
Desarrollo Web Ágil con Symfony, Bootstrap y AngularDesarrollo Web Ágil con Symfony, Bootstrap y Angular
Desarrollo Web Ágil con Symfony, Bootstrap y AngularFreelancer
 
Servidor Web Apache, PHP, MySQL.
Servidor Web Apache, PHP, MySQL.Servidor Web Apache, PHP, MySQL.
Servidor Web Apache, PHP, MySQL.Ángel Acaymo M. G.
 
Iniciación PHP 5. Ejercicios
Iniciación PHP 5. EjerciciosIniciación PHP 5. Ejercicios
Iniciación PHP 5. EjerciciosRightster
 
Iniciación PHP 5. Introducción
Iniciación PHP 5. IntroducciónIniciación PHP 5. Introducción
Iniciación PHP 5. IntroducciónRightster
 
Introducción a PHP - Programador PHP - UGR
Introducción a PHP - Programador PHP - UGRIntroducción a PHP - Programador PHP - UGR
Introducción a PHP - Programador PHP - UGRJuan Belón Pérez
 
Curso Avanzado PHP para EHU/UPV
Curso Avanzado PHP para EHU/UPVCurso Avanzado PHP para EHU/UPV
Curso Avanzado PHP para EHU/UPVIrontec
 
Masterclass PHP 5.3
Masterclass PHP 5.3Masterclass PHP 5.3
Masterclass PHP 5.3ADWE Team
 
Tutorial de php y my sql completo
Tutorial de php y my sql completoTutorial de php y my sql completo
Tutorial de php y my sql completoAndrés Amaya
 
Manual de php con ejercicios
Manual de php con ejerciciosManual de php con ejercicios
Manual de php con ejercicioswilliam kozisck
 

Mais procurados (20)

Seguridad en PHP (es)
Seguridad en PHP (es)Seguridad en PHP (es)
Seguridad en PHP (es)
 
Iniciación PHP 5. Programación Orientada a Objetos
Iniciación PHP 5. Programación Orientada a ObjetosIniciación PHP 5. Programación Orientada a Objetos
Iniciación PHP 5. Programación Orientada a Objetos
 
Symfony2 Formacion y primeros pasos
Symfony2  Formacion y primeros pasosSymfony2  Formacion y primeros pasos
Symfony2 Formacion y primeros pasos
 
Symfony2: Framework para PHP5
Symfony2: Framework para PHP5Symfony2: Framework para PHP5
Symfony2: Framework para PHP5
 
Mi primer programa en Symfony2
Mi primer programa en Symfony2Mi primer programa en Symfony2
Mi primer programa en Symfony2
 
CRUD básico con Symfony
CRUD básico con SymfonyCRUD básico con Symfony
CRUD básico con Symfony
 
Las buenas prácticas oficiales para aplicaciones Symfony
Las buenas prácticas oficiales para aplicaciones SymfonyLas buenas prácticas oficiales para aplicaciones Symfony
Las buenas prácticas oficiales para aplicaciones Symfony
 
Symfony2: Interacción con CSS, JS y HTML5
Symfony2: Interacción con CSS, JS y HTML5Symfony2: Interacción con CSS, JS y HTML5
Symfony2: Interacción con CSS, JS y HTML5
 
desarrolo de sitios web php y mysql
desarrolo de sitios web php y mysqldesarrolo de sitios web php y mysql
desarrolo de sitios web php y mysql
 
Programacion Orientada a Objetos en php
Programacion Orientada a Objetos en phpProgramacion Orientada a Objetos en php
Programacion Orientada a Objetos en php
 
Desarrollo Web Ágil con Symfony, Bootstrap y Angular
Desarrollo Web Ágil con Symfony, Bootstrap y AngularDesarrollo Web Ágil con Symfony, Bootstrap y Angular
Desarrollo Web Ágil con Symfony, Bootstrap y Angular
 
Servidor Web Apache, PHP, MySQL.
Servidor Web Apache, PHP, MySQL.Servidor Web Apache, PHP, MySQL.
Servidor Web Apache, PHP, MySQL.
 
Iniciación PHP 5. Ejercicios
Iniciación PHP 5. EjerciciosIniciación PHP 5. Ejercicios
Iniciación PHP 5. Ejercicios
 
Iniciación PHP 5. Introducción
Iniciación PHP 5. IntroducciónIniciación PHP 5. Introducción
Iniciación PHP 5. Introducción
 
Introducción a PHP - Programador PHP - UGR
Introducción a PHP - Programador PHP - UGRIntroducción a PHP - Programador PHP - UGR
Introducción a PHP - Programador PHP - UGR
 
Curso Avanzado PHP para EHU/UPV
Curso Avanzado PHP para EHU/UPVCurso Avanzado PHP para EHU/UPV
Curso Avanzado PHP para EHU/UPV
 
Symfony Parte 2
Symfony Parte 2Symfony Parte 2
Symfony Parte 2
 
Masterclass PHP 5.3
Masterclass PHP 5.3Masterclass PHP 5.3
Masterclass PHP 5.3
 
Tutorial de php y my sql completo
Tutorial de php y my sql completoTutorial de php y my sql completo
Tutorial de php y my sql completo
 
Manual de php con ejercicios
Manual de php con ejerciciosManual de php con ejercicios
Manual de php con ejercicios
 

Semelhante a PHP Avanzado: Patrones de diseño

Gestionar mis proyectos con ayuda de CodeIgniter
Gestionar mis proyectos con ayuda de CodeIgniterGestionar mis proyectos con ayuda de CodeIgniter
Gestionar mis proyectos con ayuda de CodeIgniterandrewzg
 
Seminario 2+parte wickets
Seminario 2+parte wicketsSeminario 2+parte wickets
Seminario 2+parte wicketsJorge Mahecha
 
Tutorial CodeIgniter + Netbeans 7
Tutorial CodeIgniter + Netbeans 7Tutorial CodeIgniter + Netbeans 7
Tutorial CodeIgniter + Netbeans 7Juan Fede
 
Masterclass ADWE Madrid
Masterclass ADWE MadridMasterclass ADWE Madrid
Masterclass ADWE MadridKubide
 
Haciendo que tu entorno de desarrollo de Drupal rocks
Haciendo que tu entorno de desarrollo de Drupal rocksHaciendo que tu entorno de desarrollo de Drupal rocks
Haciendo que tu entorno de desarrollo de Drupal rocksSacha Chua
 
Todo lo que necesitas saber sobre Drupal 8
Todo lo que necesitas saber sobre Drupal 8Todo lo que necesitas saber sobre Drupal 8
Todo lo que necesitas saber sobre Drupal 8Acquia
 
Primeros pasos Symfony PHPVigo
Primeros pasos Symfony PHPVigoPrimeros pasos Symfony PHPVigo
Primeros pasos Symfony PHPVigoPHP Vigo
 
Intro a cakephp
Intro a cakephpIntro a cakephp
Intro a cakephpbetabeers
 
Materiales del curso de Symfony2
Materiales del curso de Symfony2Materiales del curso de Symfony2
Materiales del curso de Symfony2Raul Fraile
 
Combinación ganadora: Plone como CMS, tu framework preferido como frontend
Combinación ganadora: Plone como CMS, tu framework preferido como frontendCombinación ganadora: Plone como CMS, tu framework preferido como frontend
Combinación ganadora: Plone como CMS, tu framework preferido como frontendmenttes
 
Desarrollo de Aplicaciones Web con ASP.NET MVC5
Desarrollo de Aplicaciones Web con ASP.NET MVC5Desarrollo de Aplicaciones Web con ASP.NET MVC5
Desarrollo de Aplicaciones Web con ASP.NET MVC5Oscar Gensollen
 
Introducción a Cake PHP Framework
Introducción a Cake PHP FrameworkIntroducción a Cake PHP Framework
Introducción a Cake PHP FrameworkJomicast
 

Semelhante a PHP Avanzado: Patrones de diseño (20)

Gestionar mis proyectos con ayuda de CodeIgniter
Gestionar mis proyectos con ayuda de CodeIgniterGestionar mis proyectos con ayuda de CodeIgniter
Gestionar mis proyectos con ayuda de CodeIgniter
 
Seminario 2+parte wickets
Seminario 2+parte wicketsSeminario 2+parte wickets
Seminario 2+parte wickets
 
Tutorial CodeIgniter + Netbeans 7
Tutorial CodeIgniter + Netbeans 7Tutorial CodeIgniter + Netbeans 7
Tutorial CodeIgniter + Netbeans 7
 
S8-DS2.pptx
S8-DS2.pptxS8-DS2.pptx
S8-DS2.pptx
 
Iniciación Con CakePHP
Iniciación Con CakePHPIniciación Con CakePHP
Iniciación Con CakePHP
 
Masterclass ADWE Madrid
Masterclass ADWE MadridMasterclass ADWE Madrid
Masterclass ADWE Madrid
 
Code Igniter
Code IgniterCode Igniter
Code Igniter
 
Haciendo que tu entorno de desarrollo de Drupal rocks
Haciendo que tu entorno de desarrollo de Drupal rocksHaciendo que tu entorno de desarrollo de Drupal rocks
Haciendo que tu entorno de desarrollo de Drupal rocks
 
Dependency Managers
Dependency ManagersDependency Managers
Dependency Managers
 
Todo lo que necesitas saber sobre Drupal 8
Todo lo que necesitas saber sobre Drupal 8Todo lo que necesitas saber sobre Drupal 8
Todo lo que necesitas saber sobre Drupal 8
 
Primeros pasos Symfony PHPVigo
Primeros pasos Symfony PHPVigoPrimeros pasos Symfony PHPVigo
Primeros pasos Symfony PHPVigo
 
Intro a cakephp
Intro a cakephpIntro a cakephp
Intro a cakephp
 
Intro a cakephp
Intro a cakephpIntro a cakephp
Intro a cakephp
 
Materiales del curso de Symfony2
Materiales del curso de Symfony2Materiales del curso de Symfony2
Materiales del curso de Symfony2
 
Dependency Managers iOS
Dependency Managers iOSDependency Managers iOS
Dependency Managers iOS
 
PHP AJAX JAVASCRIPT MYSQL JQUERY
PHP AJAX JAVASCRIPT MYSQL JQUERYPHP AJAX JAVASCRIPT MYSQL JQUERY
PHP AJAX JAVASCRIPT MYSQL JQUERY
 
Spring mvc
Spring mvcSpring mvc
Spring mvc
 
Combinación ganadora: Plone como CMS, tu framework preferido como frontend
Combinación ganadora: Plone como CMS, tu framework preferido como frontendCombinación ganadora: Plone como CMS, tu framework preferido como frontend
Combinación ganadora: Plone como CMS, tu framework preferido como frontend
 
Desarrollo de Aplicaciones Web con ASP.NET MVC5
Desarrollo de Aplicaciones Web con ASP.NET MVC5Desarrollo de Aplicaciones Web con ASP.NET MVC5
Desarrollo de Aplicaciones Web con ASP.NET MVC5
 
Introducción a Cake PHP Framework
Introducción a Cake PHP FrameworkIntroducción a Cake PHP Framework
Introducción a Cake PHP Framework
 

Último

AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPOAREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPOnarvaezisabella21
 
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxaylincamaho
 
El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.241514949
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxazmysanros90
 
Los Microcontroladores PIC, Aplicaciones
Los Microcontroladores PIC, AplicacionesLos Microcontroladores PIC, Aplicaciones
Los Microcontroladores PIC, AplicacionesEdomar AR
 
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxLAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxAlexander López
 
Tecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptxTecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptxGESTECPERUSAC
 
Mapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMidwarHenryLOZAFLORE
 
Trabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdfTrabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdfedepmariaperez
 
El uso de las tic en la vida ,lo importante que son
El uso de las tic en la vida ,lo importante  que sonEl uso de las tic en la vida ,lo importante  que son
El uso de las tic en la vida ,lo importante que son241514984
 
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del PerúRed Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del PerúCEFERINO DELGADO FLORES
 
GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptx241523733
 
Excel (1) tecnologia.pdf trabajo Excel taller
Excel  (1) tecnologia.pdf trabajo Excel tallerExcel  (1) tecnologia.pdf trabajo Excel taller
Excel (1) tecnologia.pdf trabajo Excel tallerValentinaTabares11
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxNombre Apellidos
 
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxEl_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxAlexander López
 
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptLUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptchaverriemily794
 
Presentación sobre la Inteligencia Artificial
Presentación sobre la Inteligencia ArtificialPresentación sobre la Inteligencia Artificial
Presentación sobre la Inteligencia Artificialcynserafini89
 
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfLa Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfjeondanny1997
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA241531640
 
tarea de exposicion de senati zzzzzzzzzz
tarea de exposicion de senati zzzzzzzzzztarea de exposicion de senati zzzzzzzzzz
tarea de exposicion de senati zzzzzzzzzzAlexandergo5
 

Último (20)

AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPOAREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
 
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
 
El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptx
 
Los Microcontroladores PIC, Aplicaciones
Los Microcontroladores PIC, AplicacionesLos Microcontroladores PIC, Aplicaciones
Los Microcontroladores PIC, Aplicaciones
 
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxLAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
 
Tecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptxTecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptx
 
Mapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptx
 
Trabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdfTrabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdf
 
El uso de las tic en la vida ,lo importante que son
El uso de las tic en la vida ,lo importante  que sonEl uso de las tic en la vida ,lo importante  que son
El uso de las tic en la vida ,lo importante que son
 
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del PerúRed Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
 
GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptx
 
Excel (1) tecnologia.pdf trabajo Excel taller
Excel  (1) tecnologia.pdf trabajo Excel tallerExcel  (1) tecnologia.pdf trabajo Excel taller
Excel (1) tecnologia.pdf trabajo Excel taller
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
 
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxEl_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
 
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptLUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
 
Presentación sobre la Inteligencia Artificial
Presentación sobre la Inteligencia ArtificialPresentación sobre la Inteligencia Artificial
Presentación sobre la Inteligencia Artificial
 
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfLa Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
 
tarea de exposicion de senati zzzzzzzzzz
tarea de exposicion de senati zzzzzzzzzztarea de exposicion de senati zzzzzzzzzz
tarea de exposicion de senati zzzzzzzzzz
 

PHP Avanzado: Patrones de diseño

  • 1. Bloque II: Patrones de diseño 1. ¿Qué son los patrones de diseño? 2. El patrón Singleton 3. El patrón Registry 4. El patrón Factory 5. El patrón Decorator 6. El patrón Observer 7. El patrón Front Controller 8. El patrón MVC Desarrollo web avanzado con PHP5
  • 2. Bloque II: Patrones de diseño 1. ¿Qué son los patrones de diseño? 2. El patrón Singleton 3. El patrón Registry 4. El patrón Factory 5. El patrón Decorator 6. El patrón Observer 7. El patrón Front Controller 8. El patrón MVC Desarrollo web avanzado con PHP5
  • 3. 2.1. ¿Qué son los patrones de diseño? Son soluciones a problemas cotidianos, son independientes de la tecnología utilizada y permiten crear un argot común. Desarrollo web avanzado con PHP 5 Bloque II: Patrones de diseño
  • 4. 2.1. ¿Qué son los patrones de diseño? Un poco de historia: ● En 1977 Christopher Alexander aplica en concepto de patrón (“pattern”) a la arquitectura. ●En 1987 Kent Beck y Ward Cunningham se plantean aplicar este concepto de patrón al sofware ●En 1994 se publica “Design Patterns: Elements of Reusable Object-Oriented Software” por la Gang Of Four (Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides) Desarrollo web avanzado con PHP 5 Bloque II: Patrones de diseño
  • 5. Bloque II: Patrones de diseño 1. ¿Qué son los patrones de diseño? 2. El patrón Singleton 3. El patrón Registry 4. El patrón Factory 5. El patrón Decorator 6. El patrón Observer 7. El patrón Front Controller 8. El patrón MVC Desarrollo web avanzado con PHP5
  • 6. 2.2. El patrón Singleton Problema Tener acceso a un recurso único que nunca sea duplicado y que además esté disponible en cualquier parte de la aplicación, sin tener que preocuparse de su existencia. Desarrollo web avanzado con PHP 5 Bloque II: Patrones de diseño
  • 7. 2.2. El patrón Singleton Ejemplo Necesitar instanciar un objeto que nos de acceso a la base de datos, pero que nos devuelva siempre la misma conexión. Desarrollo web avanzado con PHP 5 Bloque II: Patrones de diseño
  • 8. 2.2. El patrón Singleton Implementación class DB{   private static $singleton;   private $connection;   private function __construct(){ $this­>conection = mysql_connect(); }   public static function getInstance(){     if(is_null(self::$singleton){       self::$singleton = new DB();     }     return self::$singleton;   } } Desarrollo web avanzado con PHP 5 Bloque II: Patrones de diseño
  • 9. Bloque II: Patrones de diseño 1. ¿Qué son los patrones de diseño? 2. El patrón Singleton 3. El patrón Registry 4. El patrón Factory 5. El patrón Decorator 6. El patrón Observer 7. El patrón Front Controller 8. El patrón MVC Desarrollo web avanzado con PHP5
  • 10. 2.3. El patrón Registry Problema Permitir que cualquier objeto sea usado como un Singleton sin necesidad de especificarlo directamente en su constructor Desarrollo web avanzado con PHP 5 Bloque II: Patrones de diseño
  • 11. 2.3. El patrón Registry Ejemplo Crear un objeto que sea una base de datos que se pueda recuperar como si fuera un singleton. Desarrollo web avanzado con PHP 5 Bloque II: Patrones de diseño
  • 12. 2.3. El patrón Registry Implementacion class Registry{   private static $register;   public static function add($item){      if(is_object($item)){ $name = get_class($item);     }else{ throw new Exception('Objeto incorrecto');     }     self::$register[$name] = $item;   } Desarrollo web avanzado con PHP 5 Bloque II: Patrones de diseño
  • 13. 2.3. El patrón Registry Implementación (continuación)   public static function get($name){ if(array_key_exists($name, self::$register)){       return self::$register[$name];     }else{ throw new Exception('Clase no registrada');     }   } } Desarrollo web avanzado con PHP 5 Bloque II: Patrones de diseño
  • 14. Bloque II: Patrones de diseño 1. ¿Qué son los patrones de diseño? 2. El patrón Singleton 3. El patrón Registry 4. El patrón Factory 5. El patrón Decorator 6. El patrón Observer 7. El patrón Front Controller 8. El patrón MVC Desarrollo web avanzado con PHP5
  • 15. 2.4. El patrón Factory Problema Necesitamos instanciar una o más clases especializadas que se encargan de hacer la misma tarea. Desarrollo web avanzado con PHP 5 Bloque II: Patrones de diseño
  • 16. 2.4. El patrón Factory Ejemplo Necesitamos cargar los parámetros de configuración de nuestra aplicación, pero estos podrán provenir de un XML o un archivo en PHP. Desarrollo web avanzado con PHP 5 Bloque II: Patrones de diseño
  • 17. 2.4. El patrón Factory Solución Desarrollo web avanzado con PHP 5 Bloque II: Patrones de diseño
  • 18. Bloque II: Patrones de diseño 1. ¿Qué son los patrones de diseño? 2. El patrón Singleton 3. El patrón Registry 4. El patrón Factory 5. El patrón Decorator 6. El patrón Observer 7. El patrón Front Controller 8. El patrón MVC Desarrollo web avanzado con PHP5
  • 19. 2.5. El patrón Decorator Problema Permitir herencia múltiple evitando que el árbol de clases crezca de manera desmesurada. Desarrollo web avanzado con PHP 5 Bloque II: Patrones de diseño
  • 20. 2.5. El patrón Decorator Ejemplo Estamos programando un juego de estrategia y creamos una clase “Tile” (tesela) para el mapa. Cada tesela permite una velocidad. abstract class Tile{   abstract function getSpeed(); } Desarrollo web avanzado con PHP 5 Bloque II: Patrones de diseño
  • 21. 2.5. El patrón Decorator Ejemplo Para crear una “Montaña” (Mountain) bastará con esto class Mountain extends Tile{   private $speed = 10;   function getSpeed(){ return $this­>speed;   } } Desarrollo web avanzado con PHP 5 Bloque II: Patrones de diseño
  • 22. 2.5. El patrón Decorator Ejemplo Y si queremos que la montaña esté congelada class FrozenMountain extends Mountain{   function getSpeed(){ return parent::getSpeed() + 2;   } } Desarrollo web avanzado con PHP 5 Bloque II: Patrones de diseño
  • 23. 2.5. El patrón Decorator Ejemplo Y si ahora queremos que la montaña esté embarrada class MuddyMountain extends class Mountain{   function getMoveRate(){ return parent::getSpeed() ­ 2;   } } Desarrollo web avanzado con PHP 5 Bloque II: Patrones de diseño
  • 24. 2.5. El patrón Decorator Ejemplo Y si necesitamos una montaña embarrada y congelada Y si ahora también tenemos explanadas Y si también pueden estar atravesadas por ríos ... Desarrollo web avanzado con PHP 5 Bloque II: Patrones de diseño
  • 25. 2.5. El patrón Decorator Ejemplo Desarrollo web avanzado con PHP 5 Bloque II: Patrones de diseño
  • 26. 2.5. El patrón Decorator Implementación El secreto para resolver correctamente este problema se basa en delegar responsibilidades. Seguimos manteniendo las primeras clases del árbol class Mountain extends class Tile{   private $speed = 10;   function getMoveRate(){ return $this­>speed;   } abstract class Tile{ }   abstract function getSpeed(); } Desarrollo web avanzado con PHP 5 Bloque II: Patrones de diseño
  • 27. 2.5. El patrón Decorator Implementación Creamos una nueva clase encargada de “decorar” abstract class TileDecorator extends Tile{   protected $tile;   function __construct(Tile $tile){ $this­>tile = $tile;   } } Desarrollo web avanzado con PHP 5 Bloque II: Patrones de diseño
  • 28. 2.5. El patrón Decorator Implementación Redefinimos nuestras clases “Congelada” y “Embarrada” class MuddyDecorator extends TileDecorator{   function getSpeed(){ return $this­>tile­>getSpeed()­2;   } } Desarrollo web avanzado con PHP 5 Bloque II: Patrones de diseño
  • 29. 2.5. El patrón Decorator Implementación Redefinimos nuestras clases “Congelada” y “Embarrada” class FrozenDecorator extends TileDecorator{   function getSpeed(){ return $this­>tile­>getSpeed()+2;   } } Desarrollo web avanzado con PHP 5 Bloque II: Patrones de diseño
  • 30. 2.5. El patrón Decorator Implementación Creando una Montaña Congelada $tile = new FrozenDecorator(               new Mountain()         ); return $title­>getSpeed() // 12 Desarrollo web avanzado con PHP 5 Bloque II: Patrones de diseño
  • 31. 2.5. El patrón Decorator Implementación Creando una explanada congelada y embarrada $tile = new MuddyDecorator(               new FrozenDecorator(                     new Plain()               )         ); return $title­>getSpeed() // 10 Desarrollo web avanzado con PHP 5 Bloque II: Patrones de diseño
  • 32. 2.5. El patrón Decorator Implementación Desarrollo web avanzado con PHP 5 Bloque II: Patrones de diseño
  • 33. Bloque II: Patrones de diseño 1. ¿Qué son los patrones de diseño? 2. El patrón Singleton 3. El patrón Registry 4. El patrón Factory 5. El patrón Decorator 6. El patrón Observer 7. El patrón Front Controller 8. El patrón MVC Desarrollo web avanzado con PHP5
  • 34. 2.6. El patrón Observer Problema Una clase adquiere responsabilidades que no le son específicas como consecuencia de un evento que sucede en su interior Desarrollo web avanzado con PHP 5 Bloque II: Patrones de diseño
  • 35. 2.6. El patrón Observer Ejemplo Consideremos una clase responsable del acceso de usuarios al sistema Desarrollo web avanzado con PHP 5 Bloque II: Patrones de diseño
  • 36. 2.6. El patrón Observer Ejemplo class Login{   const LOGIN_GRANTED = 1;   const LOGIN_DENIED  = 2;   private $status = array();   public function handleLogin($user, $pass, $ip){ switch(rand(1,2)){ case 1:    $this­>setStatus(self::LOGIN_GRANTED, $user, $ip); $ret = true; break; case 2:     $this­>setStatus(self::LOGIN_DENIED, $user, $ip); $ret = false; break;     }      return $ret;   } } Desarrollo web avanzado con PHP 5 Bloque II: Patrones de diseño
  • 37. 2.6. El patrón Observer Ejemplo La clase Login tendría además su correspondiente getter y setter del atributo status class Login{   // … codigo anterior   public function getStatus(){ return $this­>status;   }   public function setStatus($status, $user, $ip){ $this­>status = array($status, $user, $ip);   } } Desarrollo web avanzado con PHP 5 Bloque II: Patrones de diseño
  • 38. 2.6. El patrón Observer Ejemplo A las dos semanas de empezar a desarrollar el proyecto nos hacen una ampliación de los requisitos Necesitamos que cada vez que un usuario intente acceder al sistema se registre su ip de acceso Desarrollo web avanzado con PHP 5 Bloque II: Patrones de diseño
  • 39. 2.6. El patrón Observer Ejemplo class Login{   // … codigo   public function handleLogin($user, $pass, $ip){ switch(rand(1,2)){ // … código     }     Logger::logIP($user, $ip, $this­>getStatus());     return $ret;   } } Desarrollo web avanzado con PHP 5 Bloque II: Patrones de diseño
  • 40. 2.6. El patrón Observer Ejemplo Un mes después, la ampliación de requisitos continúa En caso de un intento de login fallido necesitamos que el sistema envíe un email de notificación Desarrollo web avanzado con PHP 5 Bloque II: Patrones de diseño
  • 41. 2.6. El patrón Observer Ejemplo class Login{   // … codigo   public function handleLogin($user, $pass, $ip){     switch(rand(1,2)){ // … código     }     Logger::logIP($user, $ip, $this­>getStatus());     if(!$ret){      Notifier::mailWarning($user, $ip, $this­>getStatus());     }     return $ret;   } } Desarrollo web avanzado con PHP 5 Bloque II: Patrones de diseño
  • 42. 2.6. El patrón Observer Ejemplo Tras quince días de calma, vuelven a solicitar nuevos cambios Necesitamos añadir una cookie a aquellos usurios que sí que consigan acceder al sistema. Desarrollo web avanzado con PHP 5 Bloque II: Patrones de diseño
  • 43. 2.6. El patrón Observer Implementación Desenganchamos los elementos clientes (observadores) de la clase central (observable o sujeto). Los observadores son notificados por el sujeto de qué evento tiene lugar Desarrollo web avanzado con PHP 5 Bloque II: Patrones de diseño
  • 44. 2.6. El patrón Observer Implementación La interfaz “IObservable” interface IObservable {   function attach(Observer $observer);   function detach(Observer $observer);   function notify(); } Desarrollo web avanzado con PHP 5 Bloque II: Patrones de diseño
  • 45. 2.6. El patrón Observer Implementación class Observable implements IObservable {   private $observers;   function attach(Observer $observer){     $this­>observers[] = $observer;   };   function detach(Observer $observer){     $key = array_search($this­>observers, $observer);     unset($this­>observers[$key]);   };   function notify(){     foreach($this­>observers as $observer){       $observer­>update($this);     }   } } Desarrollo web avanzado con PHP 5 Bloque II: Patrones de diseño
  • 46. 2.6. El patrón Observer Implementación La interfaz “IObserver” interface IObserver {   function update(Observable $observable); } Desarrollo web avanzado con PHP 5 Bloque II: Patrones de diseño
  • 47. 2.6. El patrón Observer Implementación class Login extends Observable{   // … codigo   public function handleLogin($user, $pass, $ip){     switch(rand(1,2)){ // … código     }     $this­>notify();     return $ret;   } } Desarrollo web avanzado con PHP 5 Bloque II: Patrones de diseño
  • 48. 2.6. El patrón Observer Implementación A las dos semanas de empezar a desarrollar el proyecto nos hacen una ampliación de los requisitos Necesitamos que cada vez que un usuario intente acceder al sistema se registre su ip de acceso Desarrollo web avanzado con PHP 5 Bloque II: Patrones de diseño
  • 49. 2.6. El patrón Observer Implementación class Logger implements Observer {   // otro código    function update(Observable $observable){     $this­>log($observable­>getStatus());   }; } $login = new Login(); $login­>attach(Logger::getInstance()); Desarrollo web avanzado con PHP 5 Bloque II: Patrones de diseño
  • 50. Bloque II: Patrones de diseño 1. ¿Qué son los patrones de diseño? 2. El patrón Singleton 3. El patrón Registry 4. El patrón Factory 5. El patrón Decorator 6. El patrón Observer 7. El patrón Front Controller 8. El patrón MVC Desarrollo web avanzado con PHP5
  • 51. 2.7. El patrón Front Controller Problema Proporcionar un único punto de entrada para todas las peticiones Desarrollo web avanzado con PHP 5 Bloque II: Patrones de diseño
  • 52. 2.7. El patrón Front Controller Solución Todas las peticiones deben ser procesadas por un único script, por ejemplo index.php Desarrollo web avanzado con PHP 5 Bloque II: Patrones de diseño
  • 53. 2.7. El patrón Front Controller Ejemplo Tenemos una web muy simple formada por tres pantalla: Inicio, Servicios y Contacto. Desarrollo web avanzado con PHP 5 Bloque II: Patrones de diseño
  • 54. 2.7. El patrón Front Controller Solución // index.php $page = isset($_GET['page'])?_GET['page']:'inicio';  include('pages/'.$page.'.php');  Desarrollo web avanzado con PHP 5 Bloque II: Patrones de diseño
  • 55. 2.7. El patrón Front Controller URL Amigables http://www.midominio.com/producto.php?id=1 vs http://www.midominio.com/producto/mac-book-pro-13 nos conformaremos con http://www.midominio.com/index.php?/producto/mac-book-pro-13 Desarrollo web avanzado con PHP 5 Bloque II: Patrones de diseño
  • 56. Bloque II: Patrones de diseño 1. ¿Qué son los patrones de diseño? 2. El patrón Singleton 3. El patrón Registry 4. El patrón Factory 5. El patrón Decorator 6. El patrón Observer 7. El patrón Front Controller 8. El patrón MVC Desarrollo web avanzado con PHP5
  • 57. 2.8. El patrón MVC El patrón MVC para una aplicación web Controlador Responde a las peticiones del usuario y actuando de “pegamento” entre modelo y vista Vista Muestra la información del modelo, normalmente Modelo HTML Representa la información sobre la que opera la aplicación Desarrollo web avanzado con PHP 5 Bloque II: Patrones de diseño
  • 58. 2.8. El patrón MVC Un ejemplo, listando los artículos de un blog <?php // Conectando con la base de datos try{ $dbh = new PDO(              'mysql:host=server.flai.es;dbname=curso_php_blog',              'curso',              'curso_2010'); echo "Conexion correcta"; }catch (Exception $e){ echo "Error: ".$e­>getMessage(); die(); } Desarrollo web avanzado con PHP 5 Bloque II: Patrones de diseño
  • 59. 2.8. El patrón MVC Un ejemplo, listando los artículos de un blog // Ejecutando la SQL $stm = $dbh­>prepare(   'SELECT title, created_at     FROM article     ORDER BY created_at     DESC LIMIT 10'); $stm­>execute(); $results = $stm­>fetchAll(); ?> Desarrollo web avanzado con PHP 5 Bloque II: Patrones de diseño
  • 60. 2.8. El patrón MVC Un ejemplo, listando los artículos de un blog <html>    <head>      <title>Listado de articulos</title>    </head>    <body>     <h1>Listado de articulos</h1>     <table>       <tr><th>Date</th><th>Title</th></tr>  <?php  foreach($results as $result)  {  echo "t<tr>n";  printf("tt<td> %s </td>n", $result['created_at']);  printf("tt<td> %s </td>n", $result['title']);  echo "t</tr>n";  }  ?>      </table>    </body>  </html> Desarrollo web avanzado con PHP 5 Bloque II: Patrones de diseño
  • 61. 2.8. El patrón MVC Mejorando el código try{ $dbh = new PDO('dsn'; }catch (Exception $e){    die("Error: ".$e­>getMessage(); } $stm = $dbh­>prepare('SELECT * FROM article LIMIT 10'); $stm­>execute(); $articles = $stm­>fetchAll(); unset($dbh); require('view.php'); Desarrollo web avanzado con PHP 5 Bloque II: Patrones de diseño
  • 62. 2.8. El patrón MVC Mejorando el código (archivo view.php) <html>   <head>     <title>Listado de artículos</title>   </head>   <body>     <h1>Listado de artículos</h1>     <table>       <tr><th>Fecha</th><th>Titulo</th></tr>     <?php foreach ($articles as $article): ?>       <tr>         <td><?php echo $article['created_at'] ?></td>         <td><?php echo $article['title'] ?></td>       </tr>     <?php endforeach; ?>     </table>   </body> </html> Desarrollo web avanzado con PHP 5 Bloque II: Patrones de diseño
  • 63. 2.8. El patrón MVC Mejorando el código aún más (index.php) <?php require('model.php'); $articles = getAllArticles(); require('view.php'); ?> Desarrollo web avanzado con PHP 5 Bloque II: Patrones de diseño
  • 64. 2.8. El patrón MVC Mejorando el código aún más (model.php) function connect($dsn){   try{     $dbh = new PDO($dsn);   }catch (Exception $e){     die("Error: ".$e­>getMessage());   }   return $dbh; } function getAllArticles(){   $dbh = connect($dsn);   $stm = $dbh­>prepare('SELECT * FROM article');   $stm­>execute();   $articles = $stm­>fetchAll();   unset($dbh);   return $articles; } Desarrollo web avanzado con PHP 5 Bloque II: Patrones de diseño