Inicio | Pedro Santana |  RSS  Mi tumblelog  Mis photos  Mi CV

 

Archivo de la categoría ‘php5’

FlavorPHP 1.0

Retomando 3, 2, 1… Como varios de ustedes saben, hemos (el equipo de gelato cms) creado un framework PHP basado en el patrón MVC jerárquico para nuestros propios desarrollos, el cual siempre ha sido open source, pero transmitido sólo a los que lo solicitaban.

En estos dias por fin tomamos la inciativa de reactivar su sitio web, subir una versión estable descargable y lo más importante poner en línea el manual para iniciar a usarlo.

De las versiones anteriores a la 1.0, también hay algunos post de blog como: Crear un Buscador con jQuery y FlavorPHP

Por lo que si gustan pasar a probar pueden visitar la web de FlavorPHP y descargarlo.

¿Qué hay de nuevo en PHP 5.3?

Para ir reviviendo este espacio, les recomiendo las siguientes lecturas para ponerse al día con la versión ya no tan nueva de PHP, la 5.3.

Live search con flavorphp y jquery

Víctor de la Rocha ha creado un excelente post donde explica paso a paso como crear un buscador en tiempo real utilizando flavorPHP y jQuery.

Para aquellos que no han escuchado de flavorphp lo puedo resumir en: framework mvc para PHP5 propio del equipo de desarrollo de gelato cms para nuestros proyectos personales, el cual algunos amigos fuera de gelato la han utilizado y les gusta (como el cms del blog de @stanmx) por lo que pusimos su mini-sitio diseñado por los chicos de Oversoftec.

Patrón estrategia

Continuando con la serie de patrones de diseño en PHP5, veamos ahora uno de los patrones que más me llaman la atención: el strategy pattern (patrón estrategia).

Este patrón se usa generalmente cuando se desea cambiar entre diferentes versiones de un algoritmo. Es decir, si tenemos un código que genera un archivo comprimido, bajo ciertas circunstancias, podemos querer un archivo .ZIP y bajo circunstancias diferentes, queremos crear un archivo .TAR.GZ.

Para implementar este patrón debemos declarar una interface (o bien una clase abstracta) base con un método para el algoritmo, el cual es implementado heredando desde las clases concretas.

En el código de nuestro sistema, debemos decidir cual estrategia concreta es la relevante, la cual debe ser instanciada para ser usada.

El ejemplo que usaré para mostrar este patrón, es la selección del idioma del contenido al abrir una página Web. Por simplicidad, asumiré que si la palabra “es” existe en $_SERVER["HTTP_ACCEPT_LANGUAGE"], estamos frente a un usuario que habla español, de otra forma, estamos frente a un usuario que prefiere el inglés.

  1. < ?php
  2. interface langStrategy {
  3.         public function helloWorld();
  4. }
  5.  
  6. class enLang implements langStrategy {
  7.     public function helloWorld() {
  8.         return "Hello World";
  9.     }   
  10. }
  11.  
  12. class esLang implements langStrategy {
  13.     public function helloWorld() {
  14.         return "Hola Mundo";
  15.     }   
  16. }
  17.  
  18. $ln = explode(‘;’,$_SERVER[HTTP_ACCEPT_LANGUAGE]);
  19. if (preg_match(‘/es/’,$ln[0])) {
  20.     $langObj = new esLang();
  21. } else {
  22.     $langObj = new enLang();
  23. }
  24.  
  25. echo $langObj->helloWorld();
  26. ?>

El patrón estrategia es usado a menudo al mismo tiempo que el patrón factory, el cual se encargaría de elegir la estrategia correcta. La siguiente entrega vendrá con este patrón.

Patrón Domain Model

El Domain Model Pattern (algo así como ”Patrón del Modelo de Dominio”), consiste en una clase que representa objetos o responsabilidades particulares en nuestro software.

Por ejemplo, para trabajar con usuarios, cada usuario sería una instancia de una clase “Usuario”.

Normalmente al usar el Domain Model se representan los datos en una o más tablas de una base de datos. Por ejemplo, para la tabla de usuarios de un sistema.

  1. CREATE TABLE `usuarios` (
  2.   `id_usuario` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  3.   `nombre` varchar(100) DEFAULT NULL,
  4.   `login` varchar(100) NOT NULL DEFAULT ,
  5.   `password` varchar(64) NOT NULL DEFAULT ,
  6.   `email` varchar(100) DEFAULT NULL,
  7.   PRIMARY KEY  (`id_usuario`)
  8. ) ENGINE = MYISAM ;

Entonces escribimos una clase que represente a cada usuario y sus atributos; es decir el Domain Model:

  1. < ?php
  2. class Usuario {
  3.     public $id_usuario;
  4.     public $nombre;
  5.     public $login;
  6.     public $password;
  7.     public $email;
  8.  
  9.     // metodos para obtener de la BD
  10.     // los datos y asignarlos a las propiedades.
  11. }
  12. ?>

Para usarla debemos instanciarla:

  1. < ?php
  2. $fulano = new Usuario();
  3. echo $fulano->nombre;
  4. ?>

De esta forma dispondremos de las propiedades de los usuarios en nuestros objetos.

Este patrón es el que usamos principalmente en la actual arquitectura de gelato. Pero es importante tener especial cuidado en no caer en el anti-patrón Anemic Domain Model que como todos los anti-patrones hace que se pierdan los beneficios del uso de patrones en nuestro diseño.