Layered Architecture o Arquitectura por capas es un estilo de programación en el que el objetivo primordial es la separación de la lógica, la presentación, los datos, la comunicación… etc. De esta forma se consigue que cada capa sea independiente de las demás: dentro de una capa, sólo sería necesario conocer la Interface que implementan las capas externas necesarias.
Gracias a esta forma de diseñar el software, se consigue una mejor distribución del programa, dando la posibilidad de dividir el trabajo más efectivamente, ya que cada grupo puede abstraerse completamente con sólo conocer las APIs (interfaces) de las capas externas necesarias.
Un ejemplo sencillo es el siguiente, pero pensando que las tres capas se encuentran en distintos ordenadores. (sacado de la Wikipedia):
Es muy sencillo dividir nuestros programas ‘Terminal’ y ‘Tornos’ en capas, ya que estas son muy diferenciables, y sin darnos cuenta, definimos las interfaces necesarias para cada capa. Aún así, al reestructurar estos programas, surgió algún que otro conflicto: es importante saber que se debe respetar la jerarquía de las capas, es decir, no se debe acceder a una capa dos niveles de profundidad por debajo de la capa en la que estemos. Por ejemplo, la capa ‘visor’ no debe acceder a la capa ‘bd’. Esto es lo que se quiere evitar con este diseño: el caos de dependencias. El siguiente es un ejemplo más completo:
Capas como ‘visor’ pueden dividirse en subcapas, al igual que todas las demás. En Java, las capas se traducen en Packages. Cuando importamos por ejemplo javax.comm.* estamos accediendo al subpaquete o subcapa comm dentro del paquete o capa javax.
La división del programa ‘Terminal’ por ejemplo, se traduce así (no se muestran las posibles subcapas):

Además, tal y como montamos nuestro sistema para la simulación, se trata de un sistema de ‘tres capas y dos niveles’ (presentación+lógica en mi portátil -terminal-, y lógica+datos en otro -servidor BD y GestiónTornos en el portátil de ordóñez)
Resumiendo, aquí tenéis links de interés que explican mejor el tema:
A Strategy for Layering Software Applications




Comentarios recientes