Un patrón arquitectónico es una solución general y reutilizable para un problema que ocurre comúnmente en la arquitectura de software dentro de un contexto determinado. [1] Los patrones arquitectónicos abordan diversas cuestiones de la ingeniería de software , como las limitaciones de rendimiento del hardware informático , la alta disponibilidad y la minimización de un riesgo empresarial . Algunos patrones arquitectónicos se han implementado dentro de los marcos de software . Hay dos categorías principales de patrones arquitectónicos: monolíticos y distribuidos . [2]
El uso de la palabra "patrón" en la industria del software estuvo influenciado por conceptos similares expresados en la arquitectura tradicional , como A Pattern Language (1977) de Christopher Alexander , que analizó la práctica en términos de establecer un léxico de patrones , lo que impulsó a los profesionales de la informática a contemplar su propio léxico de diseño.
El uso de esta metáfora dentro de la profesión de ingeniería de software se volvió común después de la publicación de Design Patterns (1994) de Erich Gamma , Richard Helm , Ralph Johnson y John Vlissides —ahora comúnmente conocidos como la "Banda de los Cuatro"—, coincidiendo con los primeros años de la Internet pública , marcando el inicio de sistemas de software complejos que "se devoraban el mundo" [3] y la correspondiente necesidad de codificar el mundo en rápida expansión del desarrollo de software en el nivel más profundo posible, sin dejar de ser flexible y adaptable.
Los patrones arquitectónicos son similares a los patrones de diseño de software pero tienen un alcance más amplio.
Aunque un patrón arquitectónico transmite una imagen de un sistema, no es una arquitectura. Un patrón arquitectónico es un concepto que resuelve y delinea algunos elementos cohesivos esenciales de una arquitectura de software. Innumerables arquitecturas diferentes pueden implementar el mismo patrón y compartir las características relacionadas. Los patrones suelen definirse como "estrictamente descritos y comúnmente disponibles". [4] [5]
Siguiendo la arquitectura de construcción tradicional, un estilo arquitectónico de software es un método específico de construcción, caracterizado por las características que lo hacen notable.
Un estilo arquitectónico define: una familia de sistemas en términos de un patrón de organización estructural; un vocabulario de componentes y conectores, con restricciones sobre cómo pueden combinarse. [6]
Un estilo arquitectónico es una colección de decisiones de diseño arquitectónico que (1) son aplicables en un contexto de desarrollo determinado, (2) restringen las decisiones de diseño arquitectónico que son específicas de un sistema particular dentro de ese contexto y (3) generan cualidades beneficiosas en cada sistema resultante. [1]
Algunos tratan los patrones arquitectónicos y los estilos arquitectónicos como si fueran lo mismo, [7] otros tratan los estilos como especializaciones de los patrones. Lo que tienen en común es que tanto los patrones como los estilos son expresiones idiomáticas que utilizan los arquitectos, "ofrecen un lenguaje común" [7] o "vocabulario" [6] con el que describir clases de sistemas.
La principal diferencia es que un patrón puede verse como una solución a un problema, mientras que un estilo es más general y no requiere de un problema a resolver para su aparición.
El software se gestiona en función de su espacio de problemas en el que se pueden aplicar soluciones. La siguiente tabla muestra cómo se considera el software en varios espacios de problemas, definidos por un subdominio y abordados con los patrones de diseño de software y patrones de solución correspondientes . Los subdominios se pueden incorporar al análisis de otros subdominios; por ejemplo, la solución de un problema de inteligencia artificial se aborda primero como un problema de arquitectura de datos.
Algunos ejemplos de patrones arquitectónicos:
, los patrones suelen definirse como algo "estrictamente descrito y comúnmente disponible". Por ejemplo, la arquitectura en capas es un estilo de llamada y retorno, cuando define un estilo general para interactuar.
Aunque un patrón arquitectónico transmite una imagen de un sistema, no es una arquitectura como tal. Un patrón arquitectónico es más bien un concepto que resuelve y delinea algunos elementos cohesivos esenciales de una arquitectura de software. Innumerables arquitecturas diferentes pueden implementar el mismo patrón y, por lo tanto, compartir las características relacionadas. Además, los patrones a menudo se definen como algo "estrictamente descrito y comúnmente disponible".