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: 18 años, 8 meses
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
:
  
hostlocalhost
  username
casuis
  password
demo
  dbname
blog
  adapter
mysql
  
#socket: /path/to/your/mysql.sock

test:
  
hostlocalhost
  username

  
password:
  
dbnameblog_test
  adapter
mysql
  
#socket: /path/to/your/mysql.sock

production:
  
hostlocalhost
  username
prod
  password
:
  
dbnameblog_production 
  adapter
mysql  
  
#socket: /path/to/your/mysql.sock

application:
   
leveldevelopment 
Espero que te sirva de ayuda

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