Ver Mensaje Individual
  #56 (permalink)  
Antiguo 03/09/2010, 16:46
Avatar de neodani
neodani
 
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 8 meses
Puntos: 20
Respuesta: Duda con PDO y mi clase

Cita:
Iniciado por GatorV Ver Mensaje
Por si solas no se pueden duplicar, es imposible, más bien tu vía código tienes que controlar eso, ¿como? usando el registro siempre, esa es tu tarea de programador.

Ahora resumir todo eso en una sola línea? Pues puedes hacer otra clase que pasandole el parámetro del config cree el objeto y te regrese los datos, esa es precisamente la tarea del patrón Factory.
Será por patrones! madre mia! xDDDDDDDDDDDDDDDDD

Este es el código final del ejemplo. Funciona perfecto.

Código PHP:
Ver original
  1. <?php
  2. require('config_reader.php');
  3. require('MyPDO.class.php');
  4. require('registry.php');
  5.  
  6. /************************************************************************/
  7. class dbFactory
  8. {
  9.     public static function create($sIniFile) {
  10.         if (Registry::exists($sIniFile)) {
  11.             return Registry::get($sIniFile);
  12.         }
  13.  
  14.         $Config = new Config($sIniFile);
  15.         $db = new MyPDO($Config);
  16.         Registry::save($sIniFile, $db);
  17.  
  18.         return $db;
  19.     }
  20. }
  21. /************************************************************************/
  22. class Categoria{
  23.     private $_con;
  24.    
  25.     public function __construct($DbConexion){
  26.             $this->_con=$DbConexion;
  27.     }
  28.    
  29.     // Listar todas las categorias de la base de datos
  30.     public function listarCategorias(){
  31.         $query = "SELECT nombre FROM categorias";
  32.         $comando = $this->_con->prepare($query);
  33.         $comando->execute();
  34.  
  35.         while( $datos = $comando->fetch() ) {
  36.             echo $datos[0].'<br />';
  37.         }
  38.     }
  39. }
  40. /************************************************************************/
  41. class Partidos{
  42.     private $_con;
  43.    
  44.     public function __construct($DbConexion){
  45.         $this->_con=$DbConexion;
  46.     }
  47.    
  48.     // Listar todos las partidos de la base de datos
  49.     public function listarPartidos(){
  50.         $query = "SELECT home FROM partidos";
  51.         $comando = $this->_con->prepare($query);
  52.         $comando->execute();
  53.  
  54.         while( $datos = $comando->fetch() ) {
  55.         echo $datos[0].'<br />';
  56.         }
  57.     }
  58. }
  59. /************************************************************************/
  60. try {
  61.     $db_master = dbFactory::create('bd_master.ini');
  62.     $db_slave = dbFactory::create('bd_slave.ini');
  63.  
  64.     $cat= new Categoria($db_slave);
  65.     $cat->listarCategorias(); // Leo de la BBDD slave
  66.     $cat->listarCategorias(); // Vuelvo a leer de la BBDD slave
  67.  
  68.     // Creo el segundo objeto el cual hace una conexion con la BBDD master
  69.     $par= new Partidos($db_master);
  70.     $par->listarPartidos(); //Leo de la BBDD
  71.  
  72.     // Cuenta el total de consultas que hubieron en cada BBDD
  73.     echo "Consultas realizadas en BD Slave: ".$db_slave->getQueryCount()."<br/>";
  74.     echo "Consultas realizadas en BD Master: ".$db_master->getQueryCount()."<br/>";
  75.    
  76. } catch (Exception $e) {
  77.     echo $e->getMessage();
  78.     echo "<br/>Ocurrio un error";
  79.     exit;
  80. }
  81. ?>

Saludos y mil gracias por las lecciones del hilo