Este sitio utiliza cookies. Al continuar, aceptas su uso. Obtenga más información, incluyendo cómo controlar las cookies.
Este post forma parte de The Software Architecture Chronicles, una serie de posts sobre Arquitectura de Software. En ellos, escribo sobre lo que he aprendido sobre Arquitectura de Software, cómo pienso en ella, y cómo uso ese conocimiento. El contenido de este post puede tener más sentido si lees los posts anteriores de esta serie.
En el último post, escribí sobre cómo han evolucionado los lenguajes de programación y lo que nos dice: que evolucionaron siempre en la dirección de proporcionar más modularidad y encapsulación.
En los siguientes posts, escribiré sobre la evolución de los Estilos Arquitectónicos y de los Patrones Arquitectónicos, así que hoy escribiré sobre qué es un Estilo Arquitectónico y qué es un Patrón Arquitectónico.
Como mucha terminología en el Desarrollo de Software, estos términos no están claros y diferentes personas le dan un significado diferente. MSDN dice que los Estilos Arquitectónicos y los Patrones Arquitectónicos son lo mismo, pero personalmente, prefiero pensar en ellos en la línea de lo que explican George Fairbanks y Michael Keeling, lo que se dice en esta respuestas de stack overflow y cómo Wikipedia separa ambos: la diferencia clave es el alcance.
También es importante reforzar la idea de que los Estilos Arquitectónicos, los Patrones Arquitectónicos y los Patrones de Diseño no son mutuamente excluyentes, son complementarios y todos ellos pueden enseñarnos algo, aunque, como siempre, deben utilizarse sólo cuando sean necesarios.
Estilos Arquitectónicos
Los estilos arquitectónicos nos dicen, a muy grandes rasgos, cómo organizar nuestro código. Es el nivel más alto de granularidad y especifica las capas, los módulos de alto nivel de la aplicación y cómo esos módulos y capas interactúan entre sí, las relaciones entre ellos. Ejemplos de estilos arquitectónicos:
- Basado en componentes
- Aplicación monolítica
- En capas
- Tubos y filtros
- Dirigido por eventos
- Publicar-subscribe
- Plug-ins
- Cliente-servidor
- Orientado a servicios
Un Estilo Arquitectónico puede implementarse de varias maneras, con un entorno técnico concreto, políticas específicas, marcos de trabajo o prácticas.
Patrones de Arquitectura
Un patrón es una solución recurrente a un problema recurrente. En el caso de los Patrones Arquitectónicos, resuelven los problemas relacionados con el Estilo Arquitectónico. Por ejemplo, «qué clases tendremos y cómo interactuarán, para implementar un sistema con un conjunto específico de capas», o «qué módulos de alto nivel tendremos en nuestra Arquitectura Orientada a Servicios y cómo se comunicarán», o «cuántos niveles tendrá nuestra Arquitectura Cliente-Servidor».
Los Patrones Arquitectónicos tienen un amplio impacto en la base de código, la mayoría de las veces impactando en toda la aplicación, ya sea horizontalmente (es decir, cómo estructurar el código dentro de una capa) o verticalmente (es decir, cómo se procesa una solicitud desde las capas externas a las internas y viceversa). Ejemplos de patrones de arquitectura:
- Tres capas
- Microkernel
- Modelo-Vista-Controlador
- Modelo-Vista-Modelo
Patrones de Diseño
Los Patrones de Diseño se diferencian de los Patrones de Arquitectura en su alcance, son más localizados, tienen menos impacto en la base de código, impactan en una sección específica de la base de código, por ejemplo:
- Cómo instanciar un objeto cuando sólo sabemos qué tipo necesita ser instanciado en tiempo de ejecución (¿tal vez una Clase Fábrica?);
- Cómo hacer que un objeto se comporte de forma diferente según su estado (¿tal vez una máquina de estados, o un Patrón de Estrategia?).
Conclusión
Como mencioné al principio de este post, todo es cuestión de alcance:
- Un Estilo Arquitectónico es el diseño de la aplicación al más alto nivel de abstracción;
- Un Patrón Arquitectónico es una forma de implementar un Estilo Arquitectónico;
- Un Patrón de Diseño es una forma de resolver un problema localizado.
Además, un patrón podría ser utilizado tanto como un Patrón Arquitectónico como un Patrón de Diseño, de nuevo dependiendo del ámbito en el que lo utilicemos, en un proyecto concreto.
Fuentes
2004 – Microsoft – Understanding Service-Oriented Architecture
2009 – Microsoft – Microsoft Application Architecture Guide
2010 – Stack Overflow – What’s the difference between Arch. Patrones y Arch. Styles?
2014 – George Fairbanks – Architecture Patterns vs. Architectural Styles
2017 – Wikipedia – List of software architecture styles and patterns