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

PHP OO Duda conceptual o teorica

Estas en el tema de Duda conceptual o teorica en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Hola estoy realizando una aplicacion en PHP y siguiendo el patrón MVC, me gustaria en mi modelo poder implementar un singleton para el acceso a ...
  #1 (permalink)  
Antiguo 03/03/2012, 07:42
 
Fecha de Ingreso: febrero-2012
Mensajes: 10
Antigüedad: 12 años, 8 meses
Puntos: 0
Duda conceptual o teorica

Hola estoy realizando una aplicacion en PHP y siguiendo el patrón MVC, me gustaria en mi modelo poder implementar un singleton para el acceso a la base de datos pero tambien me gustaria poder extender es decir tener una clase Model y que despues de esa clase extiendan por ejemplo clase ModelUsuarios, ModelProductos, etc. (Herencia)
Mi duda es como realizo el singleton ya que si la clase model se encarga de la conexion y el singleton se realiza por metodos estaticos y estos mismos no son heredados.
Mi pregunta es: ¿¿como aseguro un instancia de los recursos de conexion??

Para que se entienda mejor ahi va mi idea.

Código PHP:
class Model{
// Propiedades de la conexion (servidor, usuario,clave,bd)

// implementar el singleton 

// funciones para conectar y desconectar
}

class 
ModelUsuario extends Model{
// realizar los metodos propios add,edit,delete,list,etc
}

class 
ModelProducto extends Model{
// realizar los metodos propios add,edit,delete,list,etc

Entonces luego en mi controlador poder llamar
Código PHP:
$modelUsuarios = new ModelUsuario();
$usuarios $modelUsuarios->getAll();
// En otro controlador quizas hacer 
$modelProductos = new ModelProducto();
$productosEnStock $modelUsuarios->getProductInStock(); 
Ahora la idea es que si la conexión esta abierta utilizar ese recurso y no solicitar una nueva conexión, por eso digo lo del patrón singleton, espero que se entienda la idea y sino esta correcta cualquier ayuda sera muy bienvenida.

Saludos.

Sandra
  #2 (permalink)  
Antiguo 03/03/2012, 08:40
 
Fecha de Ingreso: enero-2012
Ubicación: Santiago de Surco, Lima - Perú
Mensajes: 266
Antigüedad: 12 años, 9 meses
Puntos: 57
Respuesta: Duda conceptual o teorica

Hola que tal.

Fíjate si estos enlaces te sirven.

http://www.cristalab.com/tutoriales/crear-e-implementar-el-patron-de-diseno-singleton-en-php-c256l/

http://angerrising.wordpress.com/2008/12/24/conexion-a-base-de-datos-con-patron-singleton-en-php/
  #3 (permalink)  
Antiguo 03/03/2012, 10:08
 
Fecha de Ingreso: febrero-2012
Mensajes: 10
Antigüedad: 12 años, 8 meses
Puntos: 0
Respuesta: Duda conceptual o teorica

Muchas gracias por los links!!! Los leeré y comentare como me fue.

Gracias de nuevo.

Saludos.

Sandra.
  #4 (permalink)  
Antiguo 03/03/2012, 13:55
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 10 meses
Puntos: 845
Respuesta: Duda conceptual o teorica

Que tal sandralopezbuezas,

Te sugiero que busques info en el foro y san google sobre porque NO deberias utilizar Singleton y menos para la conexión a la bbdd, no se muy bien que tratas de implementar pero parece Active Record, te podria interesar ver algo de Doctrine 1.x o Propel.

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #5 (permalink)  
Antiguo 03/03/2012, 22:30
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: Duda conceptual o teorica

Exacto, para lo que quieres es mejor usar un patrón como Factory, y que la conexión sea una dependencia del modelo, y sea inyectada, por ejemplo:
Código PHP:
Ver original
  1. class ModelFactory
  2. {
  3.         public static function factory($sModel)
  4.         {
  5.                     $db = self::getDb(); // Obtienes el db de alguna manera
  6.                     $model = new $sModel();
  7.                     $model->setDb($db);
  8.  
  9.                     return $model;
  10.          }
  11. }

Así manejas que solo exista un punto para crear tu objeto DB, también puedes usar un registro local para guardar los modelos ya creados y no estes regresando modelos que no necesitas.

Te recomiendo leas de Dependencia de Inyecciones es una muy buena manera de hacer diseño de Software.

Saludos.

Etiquetas: extends, model, singleton
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




La zona horaria es GMT -6. Ahora son las 10:12.