Un patrón arquitectónico es una resolución general y reutilizable de un problema que ocurre comúnmente en la arquitectura de software dentro de un contexto determinado. [1] Los patrones arquitectónicos abordan diversas cuestiones en 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 marcos de software .
El uso de la palabra "patrón" en la industria del software estuvo influenciado por conceptos similares a los expresados en la arquitectura tradicional , como A Pattern Language (1977) de Christopher Alexander, que discutió la práctica en términos de establecer un léxico de patrones , incitando a los profesionales. de la informática para 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) por Erich Gamma , Richard Helm , Ralph Johnson y John Vlissides (ahora comúnmente conocida como la "Banda de los Cuatro"), coincidiendo con los primeros años. de la Internet pública , lo que marca el inicio de sistemas de software complejos que "se comen el mundo" [2] y la correspondiente necesidad de codificar el mundo en rápida expansión del desarrollo de software al 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 la imagen de un sistema, no es una arquitectura. Un patrón arquitectónico es un concepto que resuelve y delimita 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 a menudo se definen como "estrictamente descritos y comúnmente disponibles". [3] [4]
Siguiendo la arquitectura de construcción tradicional, un estilo arquitectónico software es un método de construcción específico, 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 se pueden combinar. [5]
Un estilo arquitectónico es una colección con nombre de decisiones de diseño arquitectónico que (1) son aplicables en un contexto de desarrollo determinado, (2) limitan las decisiones de diseño arquitectónico que son específicas de un sistema particular dentro de ese contexto, y (3) obtienen cualidades beneficiosas en cada uno de ellos. sistema resultante. [1]
Algunos tratan los patrones arquitectónicos y los estilos arquitectónicos como lo mismo, [6] algunos tratan los estilos como especializaciones de patrones. Lo que tienen en común es que tanto los patrones como los estilos son modismos que pueden utilizar los arquitectos, "proporcionan un lenguaje común" [6] o "vocabulario" [5] 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 un problema que resolver para su apariencia.
El software se gestiona por 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 correspondientes patrones de diseño de software y patrones de solución . Los subdominios se pueden incorporar al análisis de otros subdominios, por ejemplo, la resolución de un problema de Inteligencia Artificial se aborda primero como un problema de Arquitectura de Datos.
Algunos ejemplos de patrones arquitectónicos:
Además, los patrones a menudo se definen como algo "estrictamente descrito y comúnmente disponible". Por ejemplo, la arquitectura en capas es un estilo de llamada y devolución, cuando define un estilo general para interactuar.
Aunque un patrón arquitectónico transmite la 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".