Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

BBDD POO Config, como implementar?

Estas en el tema de BBDD POO Config, como implementar? en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Hola buenas de nuevo, Estoy un poco bastante confundido Ya he mirado de todo.. y sigo con dudas.. espero que me las aclaréis las dudas.. ...
  #1 (permalink)  
Antiguo 12/04/2011, 09:22
 
Fecha de Ingreso: julio-2008
Ubicación: Barcelona
Mensajes: 2.100
Antigüedad: 15 años, 9 meses
Puntos: 165
BBDD POO Config, como implementar?

Hola buenas de nuevo,

Estoy un poco bastante confundido

Ya he mirado de todo.. y sigo con dudas.. espero que me las aclaréis las dudas..

Duda 1: Si tengo un objeto de negocio, por ejemplo, Oferta, como implemento internamente la conexión y la recogida de datos de la BBDD??? Me gustaría ver un ejemplo.. le paso un Config a cada objeto que creo¿? le paso una id de conexión? no le paso nada? y después quien se encarga de cerrar la conexión?

Duda 2: Si cada oferta tiene un id, y la necesito para ver una oferta.. quien se encarga de recibir esta id? una función? el constructor de la clase? un método de la clase??

Duda 3: Si el objeto oferta, esta asociado a una ciudad, y quiero obtener el nombre de la ciudad... como la obtengo a partir del objeto oferta???... puedo hacer un new Ciudad, pero.. si tengo 9999 campos, los cargo todos?? y si sólo quiero el nombre??

Un saludo y perdón por la parrafada...
  #2 (permalink)  
Antiguo 12/04/2011, 10:32
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 15 años, 9 meses
Puntos: 1532
Respuesta: BBDD POO Config, como implementar?

Cita:
Iniciado por miktrv Ver Mensaje
Estoy un poco bastante confundido
¿poco o mucho, pero una de dos ?

Los ORM's siempre disponen de un objeto global connection, puede seguir el patrón singleton o no: como en doctrine definiéndolo directamente en la configuración de cada conexión.

existen muchas estrategias para que al crear una instancia esta devuelva los campos requeridos, en doctrine con DQL el objeto Doctrine_Query puedes definir un select especifico con los campos que quieras, y dependiendo del hydrator este devuelve las instancias de cada clase del modelo, las mismas están preparadas en el caso de que si llegan a solicitarse un campo no especificado realizar otra consulta (debido a que el id del registro siempre se obtiene, así no se especifique) que devuelva dicho dato, como resultado se obtiene en memoria solo los datos de la consulta, pero las clases del modelo realizarán otras consultas dependiendo de las solicitudes
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...
  #3 (permalink)  
Antiguo 12/04/2011, 10:35
 
Fecha de Ingreso: julio-2008
Ubicación: Barcelona
Mensajes: 2.100
Antigüedad: 15 años, 9 meses
Puntos: 165
Respuesta: BBDD POO Config, como implementar?

Me he quedado más o menos igual.. estoy seguro de que pueden salir mejores respuestas, más sencillas de entender.. gracias de todos modos.
  #4 (permalink)  
Antiguo 13/04/2011, 13:11
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 4 meses
Puntos: 845
Respuesta: BBDD POO Config, como implementar?

Buenas preguntas miktrv, pero no hay respuestas simples,

1- Hay varias formas de resolverlo, una seria utilizar DI, esto se comento en tu thread anterior, otra mas simple seria que tuvieras un Registry, que en el guardes la conexión y que tus dao's hicieran un fallback al Registry, algo así:

Código PHP:
Ver original
  1. abstract class Dao implements IDao
  2. {
  3.     protected $_pdo;
  4.    public function __construct(PDO $pdo = null)
  5.    {
  6.        if (null === $pdo) {
  7.             $pdo = $this->_getDefaultConnection();  
  8.        }
  9.         $this->_pdo  = $pdo;
  10.    }  
  11.    
  12.    protected function _getDefaultConnection()
  13.    {
  14.         if(!Registry::has('PDO')) {
  15.             throw new DaoException(/***/);            
  16.         }
  17.         return Registry::get('PDO');
  18.    }
  19. }
  20.  
  21. class OfertaDao extends Dao
  22. {}

esta implementación si bien es mas simple, oculta dependencias, lo ideal seria DI, con respecto a cerrar la conexión, de eso no te tenes que preocupar, lo hace PHP cuando termina la ejecución del script.

2- Quien recive el id es el finder del Dao, osea en tu controller instanciarias el Dao y llamarias al find con el id correspondiente,
Código PHP:
Ver original
  1. interface IDao
  2. {
  3.     public function find($id);
  4.     public function findAll();
  5. }
  6.  
  7. abstract class Dao implements IDao
  8. {}
  9.  
  10. class OfertaDao extends Dao
  11. {}
  12.  
  13. //Controller
  14. $dao    = new OfertaDao();
  15. $oferta = $dao->find($_GET['id']);

3- esta pregunta es por demás compleja, la forma simple es que te traigas todo lo relacionado.

Código PHP:
Ver original
  1. class OfertaDao extends Dao
  2. {
  3.    public function find($id, $loadRelated = false)
  4.    {
  5.        $oferta = parent::find($id);
  6.        if(true === $loadRelated && $oferta instanceof Oferta) {
  7.              $cdao = new CiuidadDao();          
  8.              $oferta->Ciudad = $cdao->find($oferta->cuidad_id);
  9.        }
  10.       return $oferta;
  11.    }
  12. }

esto no es mas que una implementación extremadamente simple, yo realmente te sugiero por el tipo de preguntas que estas haciendo, que utilices una herramienta como Doctrine y si es posible la version 2, el problema es que corre sobre PHP 5.3+.

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)

Última edición por masterpuppet; 13/04/2011 a las 14:16 Razón: typo
  #5 (permalink)  
Antiguo 13/04/2011, 15:05
 
Fecha de Ingreso: julio-2008
Ubicación: Barcelona
Mensajes: 2.100
Antigüedad: 15 años, 9 meses
Puntos: 165
Respuesta: BBDD POO Config, como implementar?

Cita:
Iniciado por masterpuppet Ver Mensaje
Buenas preguntas miktrv, pero no hay respuestas simples,

1- Hay varias formas de resolverlo, una seria utilizar DI, esto se comento en tu thread anterior, otra mas simple seria que tuvieras un Registry, que en el guardes la conexión y que tus dao's hicieran un fallback al Registry, algo así:

Código PHP:
Ver original
  1. abstract class Dao implements IDao
  2. {
  3.     protected $_pdo;
  4.    public function __construct(PDO $pdo = null)
  5.    {
  6.        if (null === $pdo) {
  7.             $pdo = $this->_getDefaultConnection();  
  8.        }
  9.         $this->_pdo  = $pdo;
  10.    }  
  11.    
  12.    protected function _getDefaultConnection()
  13.    {
  14.         if(!Registry::has('PDO')) {
  15.             throw new DaoException(/***/);            
  16.         }
  17.         return Registry::get('PDO');
  18.    }
  19. }
  20.  
  21. class OfertaDao extends Dao
  22. {}

esta implementación si bien es mas simple, oculta dependencias, lo ideal seria DI, con respecto a cerrar la conexión, de eso no te tenes que preocupar, lo hace PHP cuando termina la ejecución del script.

2- Quien recive el id es el finder del Dao, osea en tu controller instanciarias el Dao y llamarias al find con el id correspondiente,
Código PHP:
Ver original
  1. interface IDao
  2. {
  3.     public function find($id);
  4.     public function findAll();
  5. }
  6.  
  7. abstract class Dao implements IDao
  8. {}
  9.  
  10. class OfertaDao extends Dao
  11. {}
  12.  
  13. //Controller
  14. $dao    = new OfertaDao();
  15. $oferta = $dao->find($_GET['id']);

3- esta pregunta es por demás compleja, la forma simple es que te traigas todo lo relacionado.

Código PHP:
Ver original
  1. class OfertaDao extends Dao
  2. {
  3.    public function find($id, $loadRelated = false)
  4.    {
  5.        $oferta = parent::find($id);
  6.        if(true === $loadRelated && $oferta instanceof Oferta) {
  7.              $cdao = new CiuidadDao();          
  8.              $oferta->Ciudad = $cdao->find($oferta->cuidad_id);
  9.        }
  10.       return $oferta;
  11.    }
  12. }

esto no es mas que una implementación extremadamente simple, yo realmente te sugiero por el tipo de preguntas que estas haciendo, que utilices una herramienta como Doctrine y si es posible la version 2, el problema es que corre sobre PHP 5.3+.

Saludos.
Wuau! muchas gracias por tu esfuerzo!! esta genial!! tengo que intentar digerir todo esto... estoy empezando con MVC.. haré preguntas más parecidas, porque aún me cuesta entender, no se lo que es Dao..

Un saludo!!!
  #6 (permalink)  
Antiguo 13/04/2011, 15:28
Avatar de _ssx  
Fecha de Ingreso: mayo-2003
Ubicación: mX
Mensajes: 683
Antigüedad: 21 años
Puntos: 60
Respuesta: BBDD POO Config, como implementar?

Cita:
Iniciado por miktrv Ver Mensaje
no se lo que es Dao..
:
http://lmgtfy.com/?q=Que+es+DAO+en+POO%3F
__________________
Escribe tu código de forma que refleje, y saque a relucir,lo mejor de tu carácter personal
www.oscararzola.com/blog
Principios de un programador
  #7 (permalink)  
Antiguo 14/04/2011, 01:12
 
Fecha de Ingreso: julio-2008
Ubicación: Barcelona
Mensajes: 2.100
Antigüedad: 15 años, 9 meses
Puntos: 165
Respuesta: BBDD POO Config, como implementar?

xD

Evidentemente esto ya esta hecho... pero no tengo ni idea de como implementarlo.. es nuevo para mi, pero sigo investigando.

Un saludo!!

Etiquetas: bbdd, config, implementar, poo
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 09:04.