E-commerce con Zend Framework: Factoría
Por zsamer en Febrero 9, 2009
En el capitulo anterior "E-commerce con Zend Framework: Introducción" como el nombre lo dice, hicimos una introducción al desarrollo y diseño de un sistema de E-commerce con Zend Framework y describimos cada uno de sus componentes y funciones dentro de la aplicación. En esta oportunidad vamos a ver la función de la clase de factoría: CartFactory.
Antes de entrar en lleno a nuestra clase factory, veamos en que consiste el patrón de diseño que la implementa. El patrón de diseño involucrado es el llamado Factory Method.
Bueno y ¿Qué es un patrón de diseño?
En la ingeniería de software, existe algo fundamental para el diseño y buenas practicas en la programación orientada a objetos "Los patrones de diseños". Estos se definen como la mejor solución a un problema recurrente y común en el desarrollo de software en un contexto determinado y van de la mano con su representación en diagramas UML.
En el patrón de diseño Factory Method está compuesta al menos por dos clases que son fundamentales, y estas son el creador y el producto.
El patrón de diseño Factory en simples palabras es una fabrica de objetos, nos crea el objeto que deseamos tener y lo retorna para su uso, toda la implementación se concentra en una clase, comúnmente llamada Factory (clase de factoría o fabrica), en otras palabras es una clase constructora de objetos de un determinado tipo.
Nuestra clase Factory CartFactory
-
<?php
-
Zend_Loader::loadClass('Zend_Session_Namespace');
-
Zend_Loader::loadClass('Core_Store_Cart_Abstract');
-
-
abstract class Core_Store_Cart_Factory
-
{
-
const ADAPTER_NAMESPACE = 'Core_Store_Cart_Abstract_';
-
-
{
-
throw new Exception('Adapter Cart name must be specified in a string');
-
}
-
-
$classEngine = self::ADAPTER_NAMESPACE . $adapterName;
-
Zend_Loader::loadClass($classEngine);
-
-
if(Zend_Registry::isRegistered('coreSession')){
-
$sessionData = Zend_Registry::get('coreSession');
-
} else {
-
$sessionData = new Zend_Session_Namespace('coreSession');
-
Zend_Registry::set('coreSession', $sessionData);
-
}
-
-
$cartObject = $sessionData->cart;
-
} else {
-
} else {
-
throw new Exception ("Adapter '$classEngine' not found");
-
}
-
-
$sessionData->cart = $cartObject;
-
}
-
-
if(! $cartObject instanceof Core_Store_Cart_Abstract){
-
throw new Exception("Adapter class '$classEngine' does not extend Core_Store_Cart_Abstract");
-
}
-
return $cartObject;
-
}
-
}
En el código de arriba, nuestra clase abstracta de factoría, contiene un solo método estático createInstance($adapterName), recibe por argumento un String que contiene en nombre del adaptador de Cart, que representa el nombre de la clase concreta StandardCart (Cart) a crear. La clase concreta StandardCart corresponde a la clase producto (el producto a fabricar/crear) en el patrón de diseño Factory y la clase CartFactory es nuestra clase creadora o fabricadora de Cart.
La implementación dentro del método createInstance suceden cosas bien interesantes, como nuestra carro de compras funciona en un scope de sesión (ámbito de sesión) es necesario crear y usar sesiones, entonces lo primero que hacemos es preguntar si existe una instancias del componente de sesión de Zend Framework: Zend_Session y si no existe creamos una con el nombre "coreSession" y la guardamos en el Registro (Zend_Registry) de nuestro sistema.
Después comprobamos si existe la variable de sesión "cart" y si el valor almacenado en la sesión es distinto de null y si corresponde al tipo de dato/objeto "Core_Store_Cart_Abstract", si es así entonces retornamos el objeto carro de compras guardado en sesión, si no existe se crea la instancia singleton del carro de compras y se guarda en la sesión y lo retorna.
Como vemos hemos hecho uso de varios componentes de Zend Framework, entre ellos: Zend_Session y Zend_Registry.
Bueno espero que haya sido un interesante articulo y nos vemos en el próximo capitulo, que va a estar muy bueno, vamos a ver la clase carro de compras Core_Store_Cart_Abstract_StandardCart y su clase padre Core_Store_Cart_Abstract.
![]()
Comentarios
2 Responses to “E-commerce con Zend Framework: Factoría”
Deja tu comentario

[...] E-commerce con Zend Framework: Factoría por zsamer [...]
[...] el capitulo anterior “E-commerce con Zend Framework: Factoría” hablamos sobre el componente/clase Factoría que nos resolvía el problema de obtener el objeto [...]