Ver Mensaje Individual
  #9 (permalink)  
Antiguo 04/04/2012, 17:27
Avatar de masterpuppet
masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: Ordenando Repositories en Doctrine y otras dudas doctrine

A ver, son dos formas de hacer lo mismo, la forma correcta y elegante es utilizar DI, lo mas sencillo es utilizar Registry.

Te propuse Pimple porque es una clase bien sencilla y te puede servir de reemplazo para tu Registry con unos pocos cambios:

Creas el container con las dependencias
Código PHP:
Ver original
  1. class Container extends Pimple
  2. {
  3.     public function __construct()
  4.     {
  5.         $this['product_class']  = 'Application\Entity\Product';
  6.         $this['category_class'] = 'Application\Entity\Category';
  7.         $this['entity_manager'] = $container->share(function ($c) {
  8.             return EntityManager::create($c['db_params'], $c['entity_manager_config']);
  9.         });
  10.         $this['product_manager'] = $container->share(function ($c) {
  11.             return new ProductManager($c['entity_manager'], $c['product_class']);
  12.         });
  13.         $this['category_manager'] = $container->share(function ($c) {
  14.             return new CategoryManager($c['entity_manager'], $c['category_class']);
  15.         });
  16.     }
  17. }

Reemplazas tu Registry por el Container
Código PHP:
Ver original
  1. ...
  2. $container   = new Container();
  3. $controlador = new $controlador($peticion, $container);
  4. ...

Utilizas el DiC
Código PHP:
Ver original
  1. public function index()
  2. {
  3.      $products = $this->container->get('product_manager')->findAll();
  4. }

de todas formas si te lía quédate con el Registry, no es lo mas limpio pero te va a funcionar, la idea es que veas las opciones que tienes tu luego utilizas lo que creas mas conveniente.

Con respecto a Singleton, tiene los mismos vicios de Registry y mas, puedes buscar en el foro o googlear que hay bastante material sobre el tema.

Cita:
Mañana le echo un vistazo al dependency injection.
Échale un ojo al link que te deje en el post anterior, es simple y claro.

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)