Ver Mensaje Individual
  #14 (permalink)  
Antiguo 06/04/2011, 14:45
Avatar de masterpuppet
masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 11 meses
Puntos: 845
Respuesta: duda: objetos de negocio y conexión a la base de datos

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 original
  1. interface IDao
  2. {
  3.     public function find($criteria);
  4.     public function findAll($criteria);
  5.     public function save($data);
  6. }
  7.  
  8. class NewsDbDao implements IDao
  9. {...}
  10.  
  11. class NewsXMLDao implements IDao
  12. {...}
  13.  
  14. class NewsWSDao implements IDao
  15. {...}
  16.  
  17. class News
  18. {
  19.     ...
  20.     public function __construct(IDao $dao)
  21.     {...}
  22.     ...
  23. }

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 original
  1. class Container
  2. {
  3.     protected $_params = array();
  4.     protected static $_shared = array();
  5.  
  6.     public function __construct(array $params)
  7.     {
  8.         $this->_params = $params
  9.     }
  10.  
  11.     public function getNewWithDbDao()
  12.     {
  13.         $pdo = new PDO($this->_params['news.dbdao.dsn']);
  14.         $dao = new NewsDbDao($pdo);
  15.         return new News($dao);
  16.     }
  17.  
  18.     public function getNewWithXMLDao()
  19.     {
  20.         $file = new SPLFileinfo($this->_params['news.xmldao.filename']);
  21.         $dao  = new NewsXMLDao($file);
  22.         return new News($dao);
  23.     }
  24.  
  25.     public function getNewWithWSDao()
  26.     {
  27.         $dao = new NewsWBDao($this->_params['news.wbdao.endpoint']);
  28.         return new News($dao);
  29.     }
  30.  
  31. }

y el modo de empleo seria:

Código PHP:
Ver original
  1. $params = array(/***/);
  2. $container = new Container($params);
  3.  
  4. $dbNew  = $container->getNewWithDbDao();
  5. $dbNew->find($criteria);
  6.  
  7. $xmlNew = $container->getNewWithXMLDao();
  8. $xmlNew->findAll($criteria);
  9.  
  10. $wsNew  = $container->getNewWithWSDao();
  11. $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
__________________
http://es.phptherightway.com/
thats us riders :)