Ampliando la respuesta de Kilian Foth, esta dirección de capas corresponde a una dirección en la que un humano explora un sistema.
Imagina que eres un nuevo desarrollador encargado de corregir un error en el sistema de capas.
Los errores suelen ser una falta de coincidencia entre lo que el cliente necesita y lo que recibe. A medida que el cliente se comunica con el sistema a través de la IU y obtiene el resultado a través de la IU (IU significa literalmente 'interfaz de usuario'), los errores también se informan en términos de IU. Así que, como desarrollador, no tienes más remedio que empezar a ver la interfaz de usuario también, para averiguar qué sucedió.
Por eso es necesario tener conexiones de capa de arriba a abajo. Ahora, ¿por qué no tenemos conexiones que van en ambos sentidos?
Bueno, tienes tres escenarios de cómo podría ocurrir ese error.
Puede ocurrir en el propio código de la interfaz de usuario y, por lo tanto, estar localizado allí. Esto es fácil, solo necesitas encontrar un lugar y arreglarlo.
Podría ocurrir en otras partes del sistema como resultado de las llamadas realizadas desde la interfaz de usuario. Lo que es moderadamente difícil, rastrea un árbol de llamadas, encuentra un lugar donde se produce el error y lo arregla.
Y podría ocurrir como resultado de una llamada INTO a su código de UI. Lo que es difícil, debe captar la llamada, encontrar su origen y luego averiguar dónde ocurre el error. Teniendo en cuenta que un punto en el que comienza está situado en el fondo de una sola rama de un árbol de llamadas Y que primero debe encontrar un árbol de llamadas correcto, podría haber varias llamadas al código de la interfaz de usuario.
Para eliminar el caso más difícil tanto como sea posible, las dependencias circulares están fuertemente desaconsejadas, las capas se conectan principalmente de manera descendente. Incluso cuando se necesita una conexión a la inversa, generalmente es limitada y está claramente definida. Por ejemplo, incluso con las devoluciones de llamada, que son una especie de conexión inversa, el código al que se llama en la devolución de llamada generalmente proporciona esta devolución de llamada en primer lugar, implementando una especie de "opt-in" para conexiones inversas, y limitando su impacto en la comprensión de un sistema.
Layering es una herramienta, dirigida principalmente a desarrolladores que admiten un sistema existente. Bueno, las conexiones entre capas también lo reflejan.