Estilos arquitectónicos vs. Patrones arquitectónicos vs. Patrones de diseño

X
Privacidad & Cookies

Este sitio utiliza cookies. Al continuar, aceptas su uso. Obtenga más información, incluyendo cómo controlar las cookies.

¡Lo tengo!

Publicidad

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

Publicidad
Por qué no se puede hacer un seguimiento de la arquitectura orientada a servicios?

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *