Archivos de la categoría ‘Patrones diseño’

Registry Pattern en PHP5

El registry pattern, pese a su simplicidad, es un patrón sumamente útil para nuestros desarrollos en OOP.

En resumidas palabras, el Registry Pattern, es un medio simple y eficiente de compartir datos y objetos en nuestra aplicación sin tener que preocuparse de mantener numerosos parámetros o hacer uso de variables globales.

El objeto que compone el patrón simplemente debe contener un array compuesto de pares clave – que podrán ser datos simples u objetos de cualquier tipo. Así mismo también se puede proveer al objeto registry de mecanismos de control para la gestión de los elementos insertados en su array (cantidad de elementos, control de duplicaciones de key, eliminación de elementos, etc.).

Veamos un pequeño ejemplo:

<?php
class Registry
{
private $datos = array();

public function add($key, $object)
{
if(!isset($this->datos[$key]))
{
$this->datos[$key] = $object;
}
}

public function remove($key)
{
if(!isset($this->datos[$key]))
{
unset($this->datos[$key]);
}
}

public function get($key)
{
if(!isset($this->datos[$key]))
{
return $this->datos[$key];
}
}

public function exist($key)
{
if(isset($this->datos[$key]))
{
return true;
}
else return false;
}
}
?>

Luego podemos usar la clase Registry instanciandola:

$registry = new Registry();
if(!$registry->exist(“usuario”)) $registry->add(“usuario”, $usuario);

$usuario = $registry->get(“usuario”);

De esta manera podemos asegurar que tendremos accesibles las variables y objetos que queramos siempre que pasemos el objeto registry al constructor de cualquiera de esos objetos.

¿Más simple imposible no?

Bien, hasta aquí esta nueva pequeña introducción a los patrones de diseño… esperamos vuestros comentarios y aportaciones.

Màrius Armenteras Comellas

Factory Pattern en PHP5

Factory Pattern es un patrón de diseño cuya función es, como su nombre indica, fabricar instancias de objetos en tiempo de ejecución.
Básicamente se trata de un método estático que, mediante un parámetro, tomará la decisión de devolver una instancia de una clase (o generalmente una subclase).

Esta funcionalidad puede permitir modificar partes concretas de una aplicación sin que esto afecte al resto.

El ejemplo que se incluye a continuación esboza, de forma simple, lo que puede aportar este patrón de diseño. Imaginemos que nuestro sistema de usuarios obtiene el nombre del mismo extrayéndolo de una BBDD. Podríamos realizar la programación teniendo esto en cuenta y nuestro código funcionaria a la perfección. ¿Pero que pasaría si un nuevo requisito fuera que los datos de esos usuarios se obtuvieran de un XML? Con seguridad deberíamos modificar bastantes partes de nuestro código, teniendo mucho cuidado que estas modificaciones no causen efectos colaterales no deseados. Todo esto lo podemos solucionar con una estructura como la que sigue.

Las clases que obtendrán los datos las hacemos implementar un interface común (en este caso un método getNombre) y una clase que será la propia fábrica en si: UsuarioFactory.

<?php

interface IUsuario

{

function getNombre();

}

class Usuario implements IUsuario

{

public function __construct($id) {}

public function getNombre()

{

return “Nombre del usuario”;

}

}

class UsuarioFactory

{

public static function crear($id)

{

return new Usuario($id);

}

}

$usuario = UsuarioFactory::crear(1);

echo $usuario->getNombre();

?>

Evidentemente esta es una aproximación muy simplificada de este conocido patrón de diseño, aunque espero que resulte útil como primera toma de contacto.

Five common PHP design patterns
Patterns For PHP

Màrius Armenteras Comellas