Capas
Una aplicación consiste en capas, que son partes horizontales abstractas. Estas capas representan los diferentes niveles y tipos de abstracción del software. Las capas ayudan a dividir la aplicación en unidades más manejables y admiten múltiples implementaciones. Por lo general, cuando el usuario realiza una solicitud web, el flujo de datos pasará por todas esas capas. Creo que cada capa debería tener un conjunto separado de modelos que no deberían ser alcanzados desde otra capa. Además, cada capa solo debería poder alcanzar la capa debajo de ella o al mismo nivel. Recomiendo usar un mapeador de datos y diferentes proyectos para mantener la separación entre las capas y los modelos. PD: Este artículo explica la arquitectura de tres capas solo desde una perspectiva de backend.
Capa de Presentación (front-end)
La capa de presentación es la capa superior del software. Aquí es donde se encuentra la interfaz de usuario del software. Contiene lógica relacionada únicamente con la presentación de datos y el inicio de cada flujo de operación CRUD (Crear, Leer, Actualizar o Borrar). En esta capa, la lógica debe ser lo más simple posible.
Capa de Lógica de Negocios (BL)
Como su nombre indica, la mayor parte de la lógica de la aplicación se encuentra en esta capa. La capa BL no debe tener un conocimiento íntimo de ningún modelo de datos para evitar realizar consultas directas a la base de datos. La entrada de esta capa es una estructura de datos recibida de la capa de presentación (front-end) y la salida es una estructura de datos recibida de la DAL (Base de Datos). La capa BL permite a los desarrolladores diseñar aplicaciones que admiten múltiples interfaces de usuario, lo que minimiza las posibilidades de duplicación innecesaria de código. Por lo general, esta capa se divide en secciones más pequeñas y fáciles de gestionar.

Capa de Acceso a Datos (Data Access LayerDAL)
La capa de acceso a datos es como el puente entre nuestras aplicaciones y el lugar donde se guarda la información, como una especie de traductor. La parte de “abstracciones de acceso a datos” se encarga de organizar esa traducción para que la información se conecte correctamente sin que nosotros tengamos que preocuparnos por los detalles complicados.