Tema: Crear un ABM
Ver Mensaje Individual
  #15 (permalink)  
Antiguo 29/12/2006, 10:31
Casuis
 
Fecha de Ingreso: septiembre-2005
Mensajes: 142
Antigüedad: 21 años
Puntos: 3
Re: Crear un ABM

Lo mejor será que pongas algo de tu codigo y te podremos decir, el ejemplo que dices está muy bien basado en DAO (direct Access Object) bueno el tema consiste en un Modelo con los metodos básicos insert, update, find....
el problema es que necesita un db es decir una conexion a base de datos, el problema viene cuando tenemos más de un modelo, entonces que pasaría tendríamos n instancias de conexion a base de datos y eso no es bueno. Como se evita??

Puedes construir una clase dataManager que implemente el patron Singleton así te aseguras que tienes solamente una instancia a base de datos. Es decir solo cargará una vez el objeto de connexion

por ejemplo :
Código PHP:

abstract class ActiveRecord{
   
   protected 
$db;

   public function 
__construct(){
      
$this->db = dataManager::getInstance();
  }
} 
Tengo un post que te explica mejor esta implementacion.

Por ejemplo yo utilizo el dataManager en uno de los primeros frameworks que hice en php5 te pongo el codigo para que lo veas no hace falta que lo entiendas todo:
Código PHP:
require_once 'External/adodb/adodb-exceptions.inc.php';
require_once 
'External/adodb/adodb.inc.php';
require_once 
'External/yaml/spyc.php';

require_once 
'Db/Exception/dataManagerException.php';



class 
DataManager{
    
    static 
$db;
    
    private function 
__construct(){}
    
    static public function 
getInstance(){
        
$params = DataManager::dbParams();
        if(Empty(
$params)){
            throw new 
dataManagerException("El archivo de configuracion no se ha definido");
        }
        
$dsn = $params['adapter']."://".$params['username'].":".
               
$params['password']."@".$params['host']."/".$params['dbname']; 

        if(!isset(
self::$db)){
            try {
                
self::$db =  NewADOConnection($dsn);
            } catch (
exception $e) {
                
var_dump($e);
                
adodb_backtrace($e->gettrace());
            }
        }
        return 
self::$db;
    }
    
    static public function 
dbParams(){
        
$name = array("development","test","production");
        
$params = Spyc::YAMLLoad(CONFIG.'database.yml');
        
$level = $params["application"]["level"];
        if(
in_array($level, $name)){
            return 
$params[$level];
        }
        return array();
    }        

}
//final de la classe dataManager 
Mi dataManager le devolvia a la clase abstract Model una unica instancia de adodb utilice adodb pq ya tenia abstaccion de base de datos y asi no la tenia que programar.

Este codigo require_once 'External/yaml/spyc.php'; y $params = Spyc::YAMLLoad(CONFIG.'database.yml');
Es otra libreria para leer ficheros yml. Lo que hace es cargar los datos del fichero database.yml
me gusta este formato porque es más humano que el xml (además también lo utilizo en ruby jeje)
Código PHP:

development
:
  
host: localhost
  username
: casuis
  password
: demo
  dbname
: blog
  adapter
: mysql
  
#socket: /path/to/your/mysql.sock

test:
  
host: localhost
  username
: 
  
password:
  
dbname: blog_test
  adapter
: mysql
  
#socket: /path/to/your/mysql.sock

production:
  
host: localhost
  username
: prod
  password
:
  
dbname: blog_production 
  adapter
: mysql  
  
#socket: /path/to/your/mysql.sock

application:
   
level: development 
Espero que te sirva de ayuda

Última edición por Casuis; 29/12/2006 a las 10:46