Padróns de arquitectura

Os **padróns arquitectónicos**, ou **padróns de arquitectura** ofrecen solucións a problemas de arquitectura software na enxeñaría de software. Un padrón arquitectónico proporciona unha descrición dos elementos que compoñen un sistema e o tipo de relación que teñen, xunto cun conxunto de restricións sobre as súas responsabilidades e interaccións. O esquema de organización estrutural e de comportamento expresado por un padrón arquitectural presenta unha solución aplicable a diferentes sistemas, en relación normalmente aos seus requirimentos funcionais ou non funcionais mais abstractos. Dise a miúdo que os padróns de arquitectura son solucións organizacionais *estritamente descritas e comunmente dispoñibles*. En comparación cos padróns de deseño, os padróns arquitectónicos teñen un nivel de abstracción maior.

Aínda que un padrón arquitectónico comunica unha imaxe do sistema, non é unha arquitectura como tal. Un padrón arquitectónico é un concepto que captura elementos esenciais dunha arquitectura de software. Moitas arquitecturas diferentes poden implementar un mesmo padrón e polo tanto compartir as mesmas características.

Un dos aspectos máis importantes dos padróns arquitectónicos é que encarnan diferentes atributos de calidade. Por exemplo, algúns padróns representan solucións a problemas de rendemento e outros poden ser utilizados con éxito en sistemas de alta dispoñibilidade. Durante as fases mais temperás do deseño, a persoa ou persoas co rol de arquitectas de software escollen que padróns arquitectónicos ofrecen de mellor maneira as calidades desexadas para o sistema.

Exemplos de padróns arquitectónicos inclúen os seguintes:

* Padróns de acceso e configuración de servizos:
** Fachada envoltorio (*wrapper facade*)
** Configurador de compoñentes
** Interceptador
** Extensión de interface
* Padróns de xestión de eventos:
** Reactor
** Proactor
** *Token* de finalización asíncrono
** Aceptador-conector
* Padróns de concorrencia:
** Obxecto activo
** Obxecto monitor
** Metade-síncrono/metade-asíncrono
** Líder/seguidores
** Almacenamento específico

## Dominios no deseño de padróns 
* **Control de acceso.** Hai moitas situacións nas cales o acceso a datos, características e funcionalidade son limitadas á definición dos usuarios. Desde un punto de vista arquitectónico, acceder a determinadas partes do software debe ter un rigoroso control.
***Concorrencia.** Moitas aplicacións deben manexar múltiples tarefas de forma que simule o paralelismo. Hai moitas formas de manexar esta concorrencia e cada unha delas pode ser presentada por un padrón arquitectónico diferente.
***Distribución.** O problema da distribución dirixe o problema de forma en que os sistemas ou compoñentes se comunican con outros nun contorno distribuído. O padrón máis común para afrontar o problema é *the broker*. Actuando como un *home no medio* entre o compoñente cliente e o servidor. O cliente envía unha mesaxe ó *broker*  e este encárgase de completar a conexión.
***Persistencia.** Os datos persistentes son almacenados en bases de datos ou arquivos e poden ser lidos ou modificados por outros procesos máis adiante. Nos contornos orientados a obxectos isto vai máis alá e o que pode ser accedido ou modificable son as propiedades dos obxectos.