Que bueno se puso el thread, lastima que llego tarde, igual voy a tratar de complementar algo, tomando de base el ejemplo de
_ssx(excelentes tus intervenciones
,) y lo que comenta
GatorV(Dependency Injection)
DAO's
Código PHP:
Ver originalinterface IDao
{
public function find($criteria);
public function findAll($criteria);
public function save($data);
}
class NewsDbDao implements IDao
{...}
class NewsXMLDao implements IDao
{...}
class NewsWSDao implements IDao
{...}
class News
{
...
public function __construct(IDao $dao)
{...}
...
}
El injector/assembler a través de una de sus formas mas típicas, un container(muy básico), garantizando las dependencias.
Código PHP:
Ver originalclass Container
{
protected $_params = array(); protected static
$_shared = array();
public function __construct
(array $params) {
$this->_params = $params
}
public function getNewWithDbDao()
{
$pdo = new PDO($this->_params['news.dbdao.dsn']);
$dao = new NewsDbDao($pdo);
return new News($dao);
}
public function getNewWithXMLDao()
{
$file = new SPLFileinfo($this->_params['news.xmldao.filename']);
$dao = new NewsXMLDao($file);
return new News($dao);
}
public function getNewWithWSDao()
{
$dao = new NewsWBDao($this->_params['news.wbdao.endpoint']);
return new News($dao);
}
}
y el modo de empleo seria:
Código PHP:
Ver original$container = new Container($params);
$dbNew = $container->getNewWithDbDao();
$dbNew->find($criteria);
$xmlNew = $container->getNewWithXMLDao();
$xmlNew->findAll($criteria);
$wsNew = $container->getNewWithWSDao();
$wsNew->save($data);
Nota: el ejemplo de
_ssx no solo muestra el beneficio de las interfaces, es un claro ejemplo de porque hay que utilizar PDO.
Saludos