Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Bloque II: Patrones de diseño                1. ¿Qué son los patrones de diseño?                2. El patrón Singleton    ...
Bloque II: Patrones de diseño                1. ¿Qué son los patrones de diseño?                2. El patrón Singleton    ...
2.1. ¿Qué son los patrones de diseño?      Son soluciones a problemas cotidianos, son independientes de la      tecnología...
2.1. ¿Qué son los patrones de diseño?  Un poco de historia:  ● En 1977 Christopher Alexander aplica en concepto de patrón ...
Bloque II: Patrones de diseño                1. ¿Qué son los patrones de diseño?                2. El patrón Singleton    ...
2.2. El patrón Singleton   Problema    Tener acceso a un recurso único que nunca sea duplicado y que    además esté dispon...
2.2. El patrón Singleton   Ejemplo    Necesitar instanciar un objeto que nos de acceso a la base de    datos, pero que nos...
2.2. El patrón Singleton  Implementación   class DB{     private static $singleton;     private $connection;     private f...
Bloque II: Patrones de diseño                1. ¿Qué son los patrones de diseño?                2. El patrón Singleton    ...
2.3. El patrón Registry   Problema    Permitir que cualquier objeto sea usado como un Singleton sin    necesidad de especi...
2.3. El patrón Registry   Ejemplo    Crear un objeto que sea una base de datos que se pueda    recuperar como si fuera un ...
2.3. El patrón Registry   Implementacion    class Registry{      private static $register;      public static function add...
2.3. El patrón Registry   Implementación (continuación)      public static function get($name){         if(array_key_exist...
Bloque II: Patrones de diseño                1. ¿Qué son los patrones de diseño?                2. El patrón Singleton    ...
2.4. El patrón Factory   Problema    Necesitamos instanciar una o más clases especializadas que se    encargan de hacer la...
2.4. El patrón Factory   Ejemplo    Necesitamos cargar los parámetros de configuración de nuestra    aplicación, pero esto...
2.4. El patrón Factory   SoluciónDesarrollo 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    ...
2.5. El patrón Decorator   Problema    Permitir herencia múltiple evitando que el árbol de clases crezca    de manera desm...
2.5. El patrón Decorator   Ejemplo    Estamos programando un juego de estrategia y creamos una    clase “Tile” (tesela) pa...
2.5. El patrón Decorator   Ejemplo    Para crear una “Montaña” (Mountain) bastará con esto                class Mountain e...
2.5. El patrón Decorator   Ejemplo    Y si queremos que la montaña esté congelada     class FrozenMountain extends Mountai...
2.5. El patrón Decorator   Ejemplo    Y si ahora queremos que la montaña esté embarrada     class MuddyMountain extends cl...
2.5. El patrón Decorator   Ejemplo    Y si necesitamos una montaña embarrada y congelada    Y si ahora también tenemos exp...
2.5. El patrón Decorator   EjemploDesarrollo 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 re...
2.5. El patrón Decorator   Implementación    Creamos una nueva clase encargada de “decorar”     abstract class TileDecorat...
2.5. El patrón Decorator   Implementación    Redefinimos nuestras clases “Congelada” y “Embarrada”     class MuddyDecorato...
2.5. El patrón Decorator   Implementación    Redefinimos nuestras clases “Congelada” y “Embarrada”     class FrozenDecorat...
2.5. El patrón Decorator   Implementación    Creando una Montaña Congelada     $tile = new FrozenDecorator(               ...
2.5. El patrón Decorator   Implementación    Creando una explanada congelada y embarrada     $tile = new MuddyDecorator(  ...
2.5. El patrón Decorator   ImplementaciónDesarrollo 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    ...
2.6. El patrón Observer   Problema    Una clase adquiere responsabilidades que no le son específicas    como consecuencia ...
2.6. El patrón Observer   Ejemplo    Consideremos una clase responsable del acceso de usuarios al    sistemaDesarrollo web...
2.6. El patrón Observer   Ejemplo    class Login{      const LOGIN_GRANTED = 1;      const LOGIN_DENIED  = 2;      private...
2.6. El patrón Observer   Ejemplo    La clase Login tendría además su correspondiente getter y setter    del atributo stat...
2.6. El patrón Observer   Ejemplo    A las dos semanas de empezar a desarrollar el proyecto nos    hacen una ampliación de...
2.6. El patrón Observer   Ejemplo    class Login{      // … codigo      public function handleLogin($user, $pass, $ip){   ...
2.6. El patrón Observer   Ejemplo    Un mes después, la ampliación de requisitos continúa     En caso de un intento de log...
2.6. El patrón Observer   Ejemplo    class Login{      // … codigo      public function handleLogin($user, $pass, $ip){   ...
2.6. El patrón Observer   Ejemplo    Tras quince días de calma, vuelven a solicitar nuevos cambios     Necesitamos añadir ...
2.6. El patrón Observer   Implementación    Desenganchamos los elementos clientes (observadores) de la    clase central (o...
2.6. El patrón Observer   Implementación    La interfaz “IObservable”     interface IObservable {       function attach(Ob...
2.6. El patrón Observer   Implementación    class Observable implements IObservable {      private $observers;      functi...
2.6. El patrón Observer   Implementación    La interfaz “IObserver”     interface IObserver {       function update(Observ...
2.6. El patrón Observer   Implementación    class Login extends Observable{      // … codigo      public function handleLo...
2.6. El patrón Observer   Implementación    A las dos semanas de empezar a desarrollar el proyecto nos    hacen una amplia...
2.6. El patrón Observer   Implementación    class Logger implements Observer {      // otro código       function update(O...
Bloque II: Patrones de diseño                1. ¿Qué son los patrones de diseño?                2. El patrón Singleton    ...
2.7. El patrón Front Controller   Problema    Proporcionar un único punto de entrada para todas las peticionesDesarrollo w...
2.7. El patrón Front Controller   Solución    Todas las peticiones deben ser procesadas por un único script,    por ejempl...
2.7. El patrón Front Controller   Ejemplo    Tenemos una web muy simple formada por tres pantalla: Inicio,    Servicios y ...
2.7. El patrón Front Controller   Solución    // index.php    $page = isset($_GET[page])?_GET[page]:inicio;     include(pa...
2.7. El patrón Front Controller   URL Amigables                   http://www.midominio.com/producto.php?id=1              ...
Bloque II: Patrones de diseño                1. ¿Qué son los patrones de diseño?                2. El patrón Singleton    ...
2.8. El patrón MVC   El patrón MVC para una aplicación web       Controlador       Responde a las       peticiones del usu...
2.8. El patrón MVC   Un ejemplo, listando los artículos de un blog   <?php   // Conectando con la base de datos   try{    ...
2.8. El patrón MVC   Un ejemplo, listando los artículos de un blog   // Ejecutando la SQL   $stm = $dbh­>prepare(     SELE...
2.8. El patrón MVC   Un ejemplo, listando los artículos de un blog   <html>      <head>        <title>Listado de articulos...
2.8. El patrón MVC   Mejorando el código   try{      $dbh = new PDO(dsn;   }catch (Exception $e){      die("Error: ".$e­>g...
2.8. El patrón MVC   Mejorando el código (archivo view.php)   <html>     <head>       <title>Listado de artículos</title> ...
2.8. El patrón MVC   Mejorando el código aún más (index.php)   <?php   require(model.php);   $articles = getAllArticles();...
2.8. El patrón MVC   Mejorando el código aún más (model.php)   function connect($dsn){     try{       $dbh = new PDO($dsn)...
Upcoming SlideShare
Loading in …5
×

PHP Avanzado: Patrones de diseño

25,124 views

Published on

¿Qué son los patrones de diseño?. El patrón Singleton. El patrón Registry
El patrón Factory. El patrón Decorator
El patrón Observer. El patrón Front Controller.
El patrón MVC

Published in: Technology
  • Be the first to comment

PHP Avanzado: Patrones de diseño

  1. 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 MVCDesarrollo web avanzado con PHP5
  2. 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 MVCDesarrollo web avanzado con PHP5
  3. 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. 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. 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 MVCDesarrollo web avanzado con PHP5
  6. 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. 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. 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. 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 MVCDesarrollo web avanzado con PHP5
  10. 10. 2.3. El patrón Registry Problema Permitir que cualquier objeto sea usado como un Singleton sin necesidad de especificarlo directamente en su constructorDesarrollo web avanzado con PHP 5 Bloque II: Patrones de diseño
  11. 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. 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. 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. 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 MVCDesarrollo web avanzado con PHP5
  15. 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. 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. 17. 2.4. El patrón Factory SoluciónDesarrollo web avanzado con PHP 5 Bloque II: Patrones de diseño
  18. 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 MVCDesarrollo web avanzado con PHP5
  19. 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. 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. 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. 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. 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. 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. 25. 2.5. El patrón Decorator EjemploDesarrollo web avanzado con PHP 5 Bloque II: Patrones de diseño
  26. 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. 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. 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. 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. 30. 2.5. El patrón Decorator Implementación Creando una Montaña Congelada $tile = new FrozenDecorator(               new Mountain()         ); return $title­>getSpeed() // 12Desarrollo web avanzado con PHP 5 Bloque II: Patrones de diseño
  31. 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() // 10Desarrollo web avanzado con PHP 5 Bloque II: Patrones de diseño
  32. 32. 2.5. El patrón Decorator ImplementaciónDesarrollo web avanzado con PHP 5 Bloque II: Patrones de diseño
  33. 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 MVCDesarrollo web avanzado con PHP5
  34. 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 interiorDesarrollo web avanzado con PHP 5 Bloque II: Patrones de diseño
  35. 35. 2.6. El patrón Observer Ejemplo Consideremos una clase responsable del acceso de usuarios al sistemaDesarrollo web avanzado con PHP 5 Bloque II: Patrones de diseño
  36. 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. 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. 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 accesoDesarrollo web avanzado con PHP 5 Bloque II: Patrones de diseño
  39. 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. 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ónDesarrollo web avanzado con PHP 5 Bloque II: Patrones de diseño
  41. 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. 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. 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 lugarDesarrollo web avanzado con PHP 5 Bloque II: Patrones de diseño
  44. 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. 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. 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. 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. 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 accesoDesarrollo web avanzado con PHP 5 Bloque II: Patrones de diseño
  49. 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. 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 MVCDesarrollo web avanzado con PHP5
  51. 51. 2.7. El patrón Front Controller Problema Proporcionar un único punto de entrada para todas las peticionesDesarrollo web avanzado con PHP 5 Bloque II: Patrones de diseño
  52. 52. 2.7. El patrón Front Controller Solución Todas las peticiones deben ser procesadas por un único script, por ejemplo index.phpDesarrollo web avanzado con PHP 5 Bloque II: Patrones de diseño
  53. 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. 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. 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-13Desarrollo web avanzado con PHP 5 Bloque II: Patrones de diseño
  56. 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 MVCDesarrollo web avanzado con PHP5
  57. 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ónDesarrollo web avanzado con PHP 5 Bloque II: Patrones de diseño
  58. 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. 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. 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. 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. 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. 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. 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

×