Adapters en Zend Framework.

Adapters en Zend Framework.

Muchos componentes de Zend Framework, utilizan “Adapters”, estos adapters corresponden a la implementacion del patron con el mismo nombre Patron Adapter.

La idea es simple. Tenemos un componente que hace ciertas cosas. Por ejemplo manejar una base de datos. Este tiene un metodo conectarse(), traerTodo(), traerLosUltimos10(), etc. Nuestro componente nos dice que tenemos estos metodos disponibles, sin importar el motor de base de datos que utlizemos. Lo unico que requerie es que le pasemos que adapter vamos a usar. Este componente no tiene la logica de como hacer para conectarse a una base, lo unico que hace es llamar al metodo con el mismo nombre del adapter que le pasamos, y hacer funciones comunes en el caso que se necesiten.

La estructura de nuestro

  1.  
  2. <?php
  3. class MyComponent_DB
  4. {
  5.     private $_conn;
  6.  
  7.     public function __construct()
  8.     {}
  9.  
  10.     public function traerTodos(iMyAdapter $adapter )
  11.     {
  12.         return $adapter->traerTodos();
  13.     }
  14.  
  15.     public function conectarse(iMyAdapter $adapter )
  16.     {
  17.         $this->_conn = $adapter->conectarse();
  18.         return true;
  19.     }
  20.  
  21.     public function traerLosUltimos10(iMyAdapter $adapter )
  22.     {
  23.         return $adapter->traerLosUltimos10(();
  24.     }
  25. }
  26. ?>
  27.  

Nuestros adapter tendrian que implementar la siguiente interfaz

  1.  
  2. <?php
  3.  
  4. interface iMyAdapter
  5. {
  6.     public function traerTodos();
  7.     public function conectarse();
  8.     public function traerLosUltimos10( );
  9. }
  10.  
  11. ?>
  12.  

De esta forma nuestro adapter para mysql tendria la siguiente forma

  1.  
  2. <?php
  3. class MyAdapter implement iMyAdapter
  4. {
  5.     private $_link;
  6.     public function traerTodos()
  7.     {
  8.         // @todo logica de mysql para traer todos los registros de una tabla
  9.     }
  10.  
  11.     public function conectarse()
  12.     {
  13.         $this->_link = mysql_connect(‘localhost’, ‘usuario’, ‘qwerty’);
  14.         mysql_select_db(‘prueba’);
  15.     }
  16.  
  17.     public function traerLosUltimos10()
  18.     {
  19.         // @todo logica para traer los ultimos10 registros de una tabla
  20.     }
  21. }
  22. ?>
  23.  

Podriamos crear la cantidad de adapters que creamos necesarios, para Oracle, para sqlite, etc.

Lo unico que hay que tener en cuenta es que nosotros tenemos que pasarle a la clase MyComponent_DB el adapter que querramos usar.

Cada uno va a contener su propia logica para hacer lo mismo que el resto de los adapters pero a su manera.

Esta misma idea podemos migrarla a otras funcionalidades como la de Autenticar un usuario, administrar roles, paginar, usar js en nuestro codigo, etc.