# data[].attributes.body
Modularidad: facilita el desarrollo, la prueba y el mantenimiento de cada capa de forma independiente.

# data[].attributes.body
Complejidad: aumenta la complejidad del sistema debido a la necesidad de interfaces y comunicación entre las capas.

# data[].attributes.body
Separación de preocupaciones.

Cuando se tiene diferentes responsabilidades o funcionalidades que pueden ser tratadas de manera independiente y quieres mantenerlas claramente separadas.

# data[].attributes.body
Martinekuan. (n.d.). Estilo de arquitectura de n niveles - Azure Architecture Center. Microsoft Learn. https://learn.microsoft.com/es-es/azure/architecture/guide/architecture-styles/n-tier

Durán, M. (11 de abril de 2023). ¿Qué es arquitectura en capas? HubSpot. https://blog.hubspot.es/website/que-es-arquitectura-en-capas

Fundamentals of software Architecture. (n.d.). Google Books. https://books.google.com.mx/books/about/Fundamentals_of_Software_Architecture.html?id=_pNdwgEACAAJ&redir_esc=y

# data[].attributes.body
Se encargan de ordenar dentro de un mar de componentes

# data[].attributes.body
Pipelines

Blackboard

# data[].attributes.body
Las capas estan organizadas en capas de logica horizontal.

# data[].attributes.body
Cada capa representa un rol especifico en la aplicacion.

# data[].attributes.body
No hay restricciones en el numero o tipos de capas que pueden existir

# data[].attributes.body
La mayoria de las arquitecturas constan de 4 capas Presentacion, negocios, persistencia y base de datos.

# data[].attributes.body
Separación de responsabilidades: permite la separación de responsabilidades y una mayor claridad en la arquitectura, ya que cada capa tiene una función específica.

# data[].attributes.body
Reutilización: posibilita que las capas se reutilicen en diferentes proyectos, lo que reduce el tiempo y los costos de desarrollo.

# data[].attributes.body
Escalabilidad: significa que se pueden agregar o quitar capas según las necesidades del sistema.

# data[].attributes.body
Flexibilidad: es adaptable a diferentes entornos y requisitos del sistema.

# data[].attributes.body
Tiempo y esfuerzo de desarrollo: requiere más tiempo y esfuerzo de desarrollo debido a la necesidad de diseñar, desarrollar y probar cada capa por separado.

# data[].attributes.body
Consumo de recursos: aumenta el consumo de recursos del sistema, como el uso de memoria y CPU, debido a la necesidad de comunicación entre las capas.

# data[].attributes.body
Costos: eleva los costos del desarrollo debido a la necesidad de diseñar y desarrollar varias capas separadas.

# data[].attributes.body
Rendimiento: disminuye el rendimiento del sistema debido a la necesidad de comunicación entre las capas.

# data[].attributes.body
Mejorar la mantenibilidad.

Cuando se quiera anticipar que tu sistema requerirá cambios y actualizaciones con el tiempo y quieres facilitar estos procesos al tener una estructura modular y bien organizada.

# data[].attributes.body
Ejemplo para la aplicación de separación en capas:

Imagina que estás desarrollando una aplicación de gestión de tareas (como un organizador de tareas o un calendario) para tu teléfono móvil.

# data[].attributes.body
1. Capa de Presentación (Interfaz de Usuario):

Esta capa sería la interfaz de usuario de la aplicación en tu teléfono. Incluye todo lo que el usuario ve y con lo que interactúa, como las pantallas de inicio, las listas de tareas, los botones y los formularios para agregar o editar tareas.

# data[].attributes.body
2. Capa de Aplicación (Lógica de Negocio):

Aquí se manejan operaciones relacionadas con las tareas, como agregar una nueva tarea, marcar una tarea como completada, establecer recordatorios, y organizar las tareas según su fecha de vencimiento o prioridad.

# data[].attributes.body
3. Capa de Datos (Acceso a Datos):

Gestiona el acceso a la base de datos o al almacenamiento de la aplicación donde se guardan todas las tareas. Esto incluiría operaciones como guardar nuevas tareas, recuperar tareas existentes, actualizar tareas y eliminar tareas.

# data[].attributes.body
Mientras que las capas cerradas facilitan la aislacion de las capas hay veces que tiene sentido que una capa este abierta

# data[].attributes.body
Supongamos que hay objetos compartidos dentro de la capa de negocios que contienen funcionalidades comunes para los componentes empresariales.

Este escenario es difícil de gobernar y controlar porque arquitectónicamente la capa de presentación tiene acceso a la capa de negocio,

y por lo tanto tiene acceso a los objetos compartidos dentro de esa capa.

# data[].attributes.body
Cada capa en este estilo puede estar cerrada o abierta.

Una capa cerrada significa que al momento de enviar una solicitud solo se puede mover de arriba a bajo, la solicitud no puede saltarse ninguna capa.

Si tuviesemos capas abiertas por ejemplo negocios y persistencia la capa de presentacion se comunicaria con la base de datos mas rapido.

# data[].attributes.body
organiza los componentes de una aplicación en capas o niveles separados, donde cada capa tiene una responsabilidad específica.

# data[].attributes.body
También se conoce como estilo de arquitectura en n-capas

# data[].attributes.body
Permite a los desarrolladores enfocarse

# data[].attributes.body
Buen inicio aplicar la arquitecrura en capas

# data[].attributes.body
No caer en el antipatron SKINHOLE

# data[].attributes.body
Debido a la familiaridad de los desarrolladores y arquitectos.

# data[].attributes.body
Cuando el arquitecto esta analizando todavia los requerimietos y necesita empezar el desarrollo.