Patrones de arquitectura
Qué es un patrón y qué categorías hay, el catálogo de los 23 patrones GoF y sus tres familias, los patrones de arquitectura más citados y los patrones de la plataforma Java empresarial.
Qué es un patrón
Un patrón es un modelo tipo: un ejemplo o una buena práctica que se repite en aplicaciones de gestión muy distintas porque todas comparten los mismos elementos comunes de análisis. Alguien resolvió el problema, la solución funcionó, se repitió lo bastante como para tener nombre, y ese nombre pasó a ser vocabulario común.
Son técnicas de alto nivel y muy semánticas: no describen líneas de código concretas, sino una forma de organizar clases y responsabilidades. Por eso el mismo patrón se ve igual de bien en Java que en C# o en TypeScript.
La función de un patrón es tipificar un problema junto con su solución. Si solo se aprende la solución, se acaba aplicando donde no hay problema, que es la forma más habitual de sobrediseñar.
Para el examen
Qué tipifica: un problema recurrente junto con su solución probada
Por qué es independiente del lenguaje: organiza clases y responsabilidades, no líneas de código
Categorías de patrones
Los patrones se agrupan según el nivel al que actúan. La escala va de lo conceptual a lo concreto y no conviene mezclarlos, porque en el examen se pregunta justo por esa diferencia.
| Categoría | A qué nivel actúa | Ejemplos |
|---|---|---|
| De análisis | Cómo se modela el negocio, antes de pensar en código | Convertir una magnitud suelta en un concepto propio |
| De arquitectura | La organización general del sistema | Layer, Broker, MVC, Blackboard, Pipeline |
| De diseño | La organización de las clases dentro de un módulo | Los 23 patrones de la banda de los cuatro |
El ejemplo típico de patrón de análisis es el de las cantidades. Modelar el peso como un simple número entero de valor 60 obliga a recordar en todas partes en qué unidad está. Un patrón de análisis dice que ahí hay un concepto propio, una Cantidad, con dos atributos: el valor y la unidad. La corrección se hace en el modelo, no en el código.
Para el examen
De análisis: el modelo de negocio
De arquitectura: el sistema entero: Layer, MVC, Broker
De diseño: las clases de un módulo: los 23 GoF
Los 23 patrones GoF y sus tres familias
GoF son las siglas de Gang of Four, la banda de los cuatro: los cuatro autores del catálogo de patrones de diseño más citado de la informática. Son 23 patrones repartidos en tres familias según el tipo de problema que resuelven.
- Creacionales: crear objetos no siempre es sencillo, porque puede haber una jerarquía grande detrás o porque el objeto se compone de muchas partes. Piénsese en una factura.
- Estructurales: resuelven problemas de la propia forma de ciertas estructuras de clases. Cada estructura se analiza por separado.
- De comportamiento: afrontan casuísticas muy variadas de cómo colaboran los objetos entre sí en tiempo de ejecución.
| Familia | Patrones |
|---|---|
| Creacionales (5) | Abstract Factory, Builder, Factory Method, Prototype, Singleton |
| Estructurales (7) | Adapter, Bridge, Composite, Decorator, Facade, Flyweight, Proxy |
| De comportamiento (11) | Chain of Responsibility, Command, Interpreter, Iterator, Mediator, Memento, Observer, State, Strategy, Template Method, Visitor |
El reparto 5, 7 y 11 se pregunta tal cual. Un truco para no dudar: los creacionales son los únicos cuyo nombre habla de fabricar (factory, builder, prototype) más el Singleton.
Los 23 patrones GoF
Creacionales (5)
- Abstract Factory
- Builder
- Factory Method
- Prototype
- Singleton
Estructurales (7)
- Adapter
- Bridge
- Composite
- Decorator
- Facade
- Flyweight
- Proxy
De comportamiento (11)
- Chain of Responsibility
- Command
- Interpreter
- Iterator
- Mediator
- Memento
- Observer
- State
- Strategy
- Template Method
- Visitor
Para el examen
Total: 23 patrones
Creacionales: 5
Estructurales: 7
De comportamiento: 11
Patrones de arquitectura
Los patrones de arquitectura marcan las grandes líneas organizativas del proyecto: cómo se parte el sistema en piezas y cómo se hablan entre ellas. Se deciden al principio y son caros de cambiar después, al contrario que los patrones de diseño, que se aplican dentro de un módulo y se pueden reemplazar sin tocar el resto.
- Layered: el sistema se parte en capas superpuestas.
- Client-server: un servidor atiende peticiones de muchos clientes.
- Master-slave: un maestro reparte trabajo entre esclavos y reúne los resultados.
- Pipe-filter: los datos atraviesan una cadena de filtros encadenados.
- Broker: un intermediario localiza el servicio adecuado y encamina la petición.
- Peer-to-peer: todos los nodos hacen de cliente y de servidor a la vez.
- Event-bus: los productores publican eventos y los consumidores se suscriben.
- Model-view-controller: separa los datos, su presentación y el control del flujo.
- Blackboard: varias piezas trabajan sobre una pizarra común de conocimiento parcial.
- Interpreter: se define un lenguaje propio y un intérprete que lo ejecuta.
Los patrones de arquitectura organizan el sistema entero; los de diseño organizan las clases dentro de una pieza. Confundir Layer o MVC con un patrón GoF es un fallo clásico: ninguno de los dos está entre los 23.
Para el examen
Cuáles son: Layered, Client-server, Master-slave, Pipe-filter, Broker, Peer-to-peer, Event-bus, MVC, Blackboard e Interpreter
Aviso: no son patrones GoF
Layer, Pipe-filter, Event-bus y MVC en detalle
El patrón de capas organiza el sistema en niveles superpuestos con una regla estricta: una capa N solo se comunica con la capa inmediatamente superior y con la inmediatamente inferior, nunca saltando por encima. El ejemplo canónico fuera del software es el modelo OSI de redes. En una aplicación de gestión, la partición habitual es presentación, negocio y persistencia.
El patrón de tuberías y filtros define un flujo de información unidireccional: hay una fuente que produce los datos, una serie de filtros encadenados que los van transformando y un sumidero que recoge el resultado. Cada filtro solo sabe de su entrada y de su salida, así que se pueden reordenar o sustituir sin tocar los demás.
El bus de eventos comunica productores y consumidores de forma asíncrona. El productor publica en un canal y sigue con lo suyo; quien esté escuchando ese canal reacciona cuando puede. Un bus de servicios empresarial, o ESB, es en el fondo una mezcla de la cola de mensajes con el filtrado. Es la infraestructura sobre la que se monta una arquitectura orientada a servicios.
El modelo, vista y controlador separa tres papeles. El modelo guarda los datos y las reglas, la vista los presenta, y el controlador recibe los eventos de entrada y decide qué hacer. La vista consulta al modelo y el modelo le notifica los cambios, de modo que la misma información puede pintarse de varias formas a la vez. Se cita a menudo como patrón de arquitectura y también como patrón de diseño, según a qué escala se aplique.
| Patrón | Cómo circula la información |
|---|---|
| Layered | Verticalmente, entre capas contiguas |
| Pipe-filter | En una sola dirección, de la fuente al sumidero |
| Event-bus | En difusión y de forma asíncrona |
| MVC | En triángulo, entre datos, presentación y control |
Para el examen
Capas: solo se habla con la capa contigua; el modelo OSI es el ejemplo
Pipe-filter: flujo unidireccional de fuente a sumidero
Event-bus: asíncrono por suscripción; el ESB
MVC: modelo, vista y controlador
Patrones de la plataforma Java empresarial
La plataforma Java empresarial trae su propio catálogo de patrones, pensados para aplicaciones web de varias capas. Tres de ellos aparecen una y otra vez.
- Intercepting Filter: en lugar de meter el control de seguridad dentro de cada servlet, se coloca en un filtro que se ejecuta antes. Así cada servlet se ocupa solo de su cometido y el filtro se pone delante de todos los que haga falta.
- Composite View: para pantallas muy complejas, se compone la página a partir de vistas más pequeñas e independientes. Cada trozo se desarrolla y se reutiliza por separado.
- Data Access Object: agrupa en un sitio el código de acceso a datos, ya sea SQL o el equivalente en un marco de persistencia, para no tenerlo desperdigado por las clases de negocio.
El acceso a datos admite varias estrategias con nombre propio. El DAO expone operaciones de negocio y esconde detrás la consulta. El Data Mapper traduce entre los objetos y las tablas sin que ninguno de los dos conozca al otro. El Active Record hace lo contrario: es el propio objeto de dominio el que sabe guardarse y recuperarse.
El Intercepting Filter es, en la práctica, un Chain of Responsibility aplicado a peticiones web: cada filtro hace su tarea y pasa el control al siguiente.
Para el examen
Intercepting Filter: comprobaciones antes del servlet
Composite View: páginas construidas por piezas
DAO: el acceso a datos concentrado en un solo sitio
Active Record: el propio objeto sabe guardarse