Patrones de diseño

Conocer qué son los patrones de diseño puede ser de gran ayuda cuando trabajamos con una metodología ágil. Los patrones de diseño aportan soluciones muy probadas para problemas concretos. Esto nos dará mayor perspectiva a la hora elegir la arquitectura que utilizaremos para utilizar un cierto problema.

En el documento Patrones de Diseño Orientado a Objetos podemos encontrar algunos patrones bien conocidos. Se clasifican en tres grandes categorías:

  • Patrones de creación: inicializan y configuran nuevos objetos. Algunos ejemplos son:
    • Abstract factory: permite crear una gama de objetos diferentes de la misma familia, mediante una única interfaz.
    • Factory method: es una simplificación del patrón "Abstract factory".
    • Prototype: devuelve una copia exacta de un objeto.
    • Singleton: restringe la creación de nuevos objetos de una clase a un único objeto.
  • Patrones estructurales: desacoplan interfaz e implementación de clases y objetos. Es decir, proponen formas de organizar clases. Algunos ejemplos son:
    • Modelo-Vista-Controlador (MVC): Organiza las capas de vista (Vista), la lógica de negocio (Controlador) y el modelo de datos (Modelo).
    • Modelo-Vista-Presentador (MVP): Es una variación del patrón MVC, en la que el Presentador (que hace las veces de controlador) actúe de intermediario entre el Modelo y la Vista.
    • Modelo-Vista-ModeloDeVista: Es una variación del patrón MVC, en la que el ModeloDeVista es una abstracción de la vista, que incluye la lógica de negocio, mientras que la vista se especializa en el control de la interfaz.
    • Quizá la siguiente analogía con el funcionamiento de un restaurante aclare las cosas: Analogía

    • Adapter: permite que clases con interfaces diferentes puedan trabajar entre sí.
    • Composite: permite que colecciones de clases emparentadas con una misma interfaz pero comportamiento diferentes sean manejadas por una clase cliente de forma transparente.
    • Decorator: permiten añadir capas de funcionalidad a un componente sin necesidad de modificarlo.
    • Proxy: permite utilizar una clase A "sustituta" de otra clase B, lo que permite controlar la forma en que se accede a B.
  • Patrones de comportamiento: proponen formas en que se relacionan las clases entre sí, y cómo se reparten responsabilidades. Algunos ejemplos son:
    • Command: permite realizar operaciones genéricas sobre una gama de objetos, sin que sea necesario saber qué clase de objeto es. Por ejemplo, encender/apagar aplicado a una bombilla o a un motor indistintamente.
    • Iterator: permite el acceso secuenciar a un conjunto de objetos.
    • Observer: una clase observadora realiza una acción cuando se produce un cambio de estado en la clase que observa.
    • Strategy: permite que una clase elija entre varios algoritmos para resolver un cierto problema.

Actividad 1. Propón un problema real resoluble mediante cada patrón de diseño. Los problemas a resolver deben basarse en el Proyecto final. Realiza los diagramas correspondientes empleando una aplicación de diseño. Puedes utilizar Umbrello, DIA o cualquier otra herramienta similar. Junto a cada diagrama, presenta un archivo de texto explicativo del problema.

Entrega la actividad en un archivo llamado Act1-patrones.zip, que incluya lo siguiente:

  • Un diagrama por cada patrón de diseño, adaptado al problema propuesto.
  • Un archivo de texto explicando el problema planteado.

Diseño arquitectónico de la aplicación web

A veces también se habla de patrón de diseño de la aplicación a la forma en que se estructuran los contenidos de cara al usuario que la visita. La arquitectura de la aplicación puede no ser evidente para el usuario (de hecho, cuando menos evidente sea, mejor será la aplicación), pero es necesario definirla.

Existen diferentes modelos arquitectónicos, que no dejan de ser teóricos, pero de los que podemos sacar modelos arquitectónicos complejos mediante combinaciones de ellos. En las siguientes imágenes se pueden ver algunos ejemplos.

Estructuras lineales.
Estructuras de malla.
Estructuras jerárquicas.
Estructuras en red.

Existen diferentes programas para diseñar la arquitectura de los contenidos. Por ejemplo, el siguiente diagrama está hecho con una herramienta llamada Pencil Project:

Con el programa Pencil se puede diseñar la arquitectura de los contenidos.

Actividad 2. Lee el Backlog del Proyecto final y diseña una arquitectura de contenidos, empleando la aplicación Pencil para la aplicación resultante.

Entrega la actividad en un archivo llamado Act2-pantrones.png

El patrón MVC en las aplicaciones web

En el libro "An Architecture for Structuring Complex Web Applications", se defiende que las aplicaciones deben construirse con el empleo de capas que permitan separar los datos de la aplicación (motores de persistencia y estrategias de acceso y extracción de datos), de los contenidos que se mostrarán (controlador) y éstos, a su vez, deben separarse del aspecto y la sensación de la interfaz. El patrón MVC se aplica ampliamente en las aplicaciones web. En http://anexsoft.com/p/61/realizando-un-crud-con-el-patron-mvc-en-php podemos ver una implementación del patrón MVC empleando PHP.

Actividad 3. Reescribe tu proyecto de "cálculo de equivalencias" utilizando el patrón MVC tal y como se describe en la sección anterior.

Entrega la actividad en un archivo llamado Act3-patrones.zip