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