Arquitectura en capas

miniatura|300px|Representación xeral dunha arquitectura en capas
A **arquitectura en capas** é unha arquitectura software na que as funcionalidades para desenvolver se agrupan, de xeito lóxico, en capas. Estas dispóñense secuencialmente e so as capas de máis baixo nivel as que ofrecen servizos ás capas superiores.

Cada mensaxe ou petición que chega ao sistema (á súa capa máis externa) fai que, sucesivamente, cada capa lle envíe unha mensaxe (pode ser a mesma mensaxe ou unha transformación dela) á súa capa adxacente inferior e espere unha resposta dela. Isto orixina unha carga de traballo considerable, xa que, agás que se produza algún erro, cada operación que leva a cabo o sistema ten que ser atendida por todas as capas que o conforman (segundo o esquema representado na imaxe da dereita).

## Características
Esta arquitectura permite:
* Construír novos sistemas a partir dos que xa existen (engadindo novas capas sobre eles).
* Dividir as responsabilidades nos sucesivos bloques ou capas (delimitando claramente as funcionalidades).
* Definir a seguridade do sistema por niveis.
* Organizar o sistema centrándose na súa organización conceptual.

## Vantaxes
As principais vantaxes deste tipo de arquitectura son:
* Illamento dos cambios a nivel de capa (ou capas adxacentes), grazas á delimitación de funcionalidades por capas.
* Limitación do alcance dos cambios de implementación nas capas, sempre que se respecten as interfaces destas.
* Favorecemento da introdución de redundancia por niveis.
* Favorecemento tanto da portabilidade como do soporte multiplataforma/protocolo.

## Desvantaxes
Pola contra, esta arquitectura presenta as seguintes desvantaxes:
* Dificultades para establecer unha división horizontal na lóxica do sistema que permita unha total independencia entre capas.
* Necesidade de comunicación entre capas non adxacentes, o que adoita revelar que a arquitectura non foi ben escollida.
* Problemas de rendemento debido ó esquema de funcionamento desta arquitectura.

## Arquitectura en catro capas
Na actualidade é doado atoparse con software que adoptou este esquema cun modelo específico de catro capas. Estas capas máis habituais son a capa de presentación, a capa de servizos e a capa modelo, que se divide á súa vez en dúas subcapas: capa de lóxica de negocio e capa de acceso a datos. Cada unha delas especialízase do seguinte xeito:

* Capa de presentación: pon en funcionamento a interface coa que interactúa o usuario que usa o sistema.
* Capa de servizos: permítenos poñer o noso sistema á disposición doutros sistemas ofrecendo unha interface (API) pública.
* Capa de lóxica de negocio: pon en funcionamento a lóxica do sistema.
* Capa de acceso a datos: abstrae a capa de lóxica de negocios do acceso aos datos persistentes.
miniatura|centro|600px|Exemplo dunha arquitectura en 4 capas.

Tamén nos encontramos a miúdo ante arquitecturas en tres capas, onde se elimina ou ben a capa de presentación (se só temos interese en poñer o noso sistema ao servizo dos demais) ou ben a capa de servizos (se non nos interesa poñer o noso sistema ao servizo dos demais).

## Distribución por niveis
Referímonos a este termo cando falamos da distribución das capas ao longo da nosa infraestrutura, xa sexa nun só equipamento ou en varios. Existen diversas alternativas comunmente adoitadas:

* No modelo de tres capas sen capa de servizos:
** Tanto a capa de presentación como a capa modelo na mesma máquina (distribución nun nivel).
** A capa de presentación separada da capa modelo (distribución en dous niveis).
* No modelo de tres capas sen capa de presentación:
** Tanto a capa de servizos como a capa modelo na mesma máquina (distribución nun nivel).
** A capa de servizos separada da capa modelo (distribución en dous niveis).
* No modelo de catro capas: xeralmente non temos todas as capas no mesmo equipamento.
* Se separamos cada capa nun nivel, podemos introducir sinxelamente redundancia tanto na capa de servizos coma na capa modelo, favorecendo o aspecto non funcional da dispoñibilidade do sistema (sistema máis robusto).
* Se, ademais, a capa de presentación se pon á disposición dos usuarios mediante a web, a actualización dos devanditos clientes é inmediata cando se modifica a devandita capa, xa que é o navegador o que actúa como aplicación cliente e é o que interpreta, polo tanto, a capa de presentación.

## Notas
## Véxase tamén
### Outros artigos
* Arquitectura mestre-escravo
* Peer-to-peer
* API
* Serialización
* Servidor