-[Patrón DTO (Data Transfer Object)](https://www.baeldung.com/java-dto-pattern)
-[Patrón DTO (Data Transfer Object)](https://www.baeldung.com/java-dto-pattern)
...
@@ -11,86 +11,94 @@ Antes de analizar los patrones de arquitectura, se recomienda entender el funcio
...
@@ -11,86 +11,94 @@ Antes de analizar los patrones de arquitectura, se recomienda entender el funcio
### Proyectos con ASP.NET
### Proyectos con ASP.NET
Se recomienda que las soluciones tengan las siguientes capas:
Para proyectos en ASP.NET, se ha implementado un patrón de arquitectura inspirado en [Arquitectura Limpia](https://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html), siguiendo las recomendaciones de [Microsoft](https://learn.microsoft.com/en-us/dotnet/architecture/modern-web-apps-azure/common-web-application-architectures#clean-architecture).
1.**Core:** Capa de dominio y recursos básicos de la solución
Este patrón de arquitectura utiliza las siguientes capas:
2.**Application:** Capa en donde estarán los servicios y la mayor parte de la lógica de negocio del sistema
3.**Infrastructure:** Capa en donde se manejarán conexiones con bases de datos y sistemas externos
1.**Core**
4.**WebApi:** Capa de presentación
2.**Application**
3.**Infrastructure**
4.**WebApi**
Se recomienda que la estructura de carpetas de la solución sea así:
Se recomienda que la estructura de carpetas de la solución sea así:
```sh
```sh
.
.
├── .env # Archivo con variables de entorno
├── .env # Archivo con variables de entorno
├── *.sln # Archivo de la solución de .NET
├── *.sln # Archivo de la solución de .NET
└── src # Código fuente
└── src # Código fuente
├── Application
├── Application
├── Core
├── Core
├── Infrastructure
├── Infrastructure
└── WebApi
└── WebApi
```
```
Se recomienda que cada capa/proyecto tenga la siguiente estructura de carpetas:
#### Proyecto `Core`
#### Proyecto `Core`
Esta capa contiene código del dominio y reglas de negocio que se reutilizan en la solución. Se debe evitar que esta capa tenga dependencias externas.
```sh
```sh
Core
src/Core
├── Constants # Clases con datos constantes
├── Core.csproj # Archivo del proyecto de .NET
├── DTOs # Clases de tipo DTO
├── Domain # Archivos del dominio
├── Entities # Clases de tipo Entidad
│ ├── Constants # Clases con constantes
├── Enums # Clases con enumeraciones
│ ├── Entities # Clases de tipo Entidad
├── Helpers # Clases generales que no son ni DTOs ni entidades (objetos planos)
│ ├── Enums # Clases con enumeraciones
├── Interfaces # Interfaces generales del sistema
│ └── Utils # Clases generales que no son ni DTOs ni entidades (objetos planos)
└── Core.csproj # Archivo del proyecto de .NET
└── Interfaces # Interfaces generales del sistema
```
```
#### Proyecto `Application`
#### Proyecto `Application`
Capa en donde estarán los servicios y la mayor parte de la lógica de negocio del sistema.
> **NOTA:** En esta capa se agregan los `DTOs`, ya que son adaptaciones de los datos que viajan entre el sistema y el exterior (`WebApi`).
```sh
```sh
Application
src/Application
├── Interfaces # Interfaces generales del sistema
├── Application.csproj # Archivo del proyecto de .NET
├── Mappings # Clases para mapeo de entidades y DTOs
├── DTOs # Clases de tipo DTO
├── Services # Servicios del sistema
├── Interfaces # Interfaces generales del sistema
├── Specifications # Especificaciones de consultas en bases de datos
├── Mappings # Clases para mapeo de entidades y DTOs
├── Utils # Funciones generales del sistema
├── Services # Servicios del sistema
├── Validators # Reglas de validaciones de clases
├── Specifications # Especificaciones de consultas en bases de datos
└── Application.csproj # Archivo del proyecto de .NET
├── Utils # Utilidades generales del sistema
└── Validators # Reglas de validaciones de clases
```
```
#### Proyecto `Infrastructure`
#### Proyecto `Infrastructure`
Capa en donde se manejarán conexiones con bases de datos y sistemas externos.
```sh
```sh
Infrastructure
src/Infrastructure
├── Integrations # Archivos para los sistemas externos
├── Infrastructure.csproj # Archivo del proyecto de .NET
├── Persistence # Archivos para la base de datos principal (SQL)
├── Integrations # Archivos de configuración de sistemas externos
│ ├── Config # Archivos de configuración
└── Persistence # Archivos para la base de datos principal (SQL)
│ │ ├── DependencyRegistry # Archivos de configuración de registro de dependencias
├── Config # Archivos de configuración
│ │ └── Entities # Archivos de configuración de entidades de la base de datos
│ ├── DependencyRegistry # Archivos de configuración para registro de dependencias
│ ├── GeneralContext.cs # Contexto de base de datos (SQL)
│ └── Entities # Archivos de configuración de entidades de la base de
│ ├── Migrations # Migraciones de la base de datos
├── GeneralContext.cs # Contexto de base de datos (SQL)
│ └── Repositories # Repositorios de las entidades
├── Migrations # Migraciones de la base de datos
└── Infrastructure.csproj # Archivo del proyecto de .NET
└── Repositories # Repositorios de las entidades
```
```
#### Proyecto `WebApi`
#### Proyecto `WebApi`
```sh
```sh
WebApi
src/WebApi
├── WebApi.csproj # Archivo del proyecto de .NET
├── Config # Archivos de configuración (registro de dependencias, configuración de complementos, etc ...)
├── Config # Archivos de configuración (registro de dependencias, configuración de complementos, etc ...)
│ ├── DependencyRegistry # Archivos de configuración de registro de dependencias
│ ├── DependencyRegistry # Archivos de configuración para registro de dependencias
│ ├── DocsSetup # Archivos de configuración del sistema de documentación (Swagger)
│ ├── DocsSetup # Archivos de configuración del sistema de documentación (Swagger)
│ └── LoggerSetup # Archivos de configuración del sistema de registros (logs)
│ └── LoggerSetup # Archivos de configuración del sistema de registros (logs)
├── Controllers # Controladores del proyecto
├── Controllers # Controladores del proyecto
│ ├── Rest # Controladores REST
│ ├── Rest # Controladores REST
│ └── Tools # Controladores personalizados (plantillas de correo electrónico, generadores de documentos, herramientas, etc ...)
│ └── Tools # Controladores personalizados (plantillas de correo electrónico, generadores de documentos, herramientas, etc ...)
├── Helpers # Clases generales del proyecto (objetos planos)
├── Interfaces # Interfaces generales del sistema
├── Interfaces # Interfaces generales del sistema
├── Program.cs # Clase principal del proyecto
├── Program.cs # Clase principal del proyecto
├── Properties # Carpeta de propiedades del proyecto (ASP.NET)
├── Properties # Carpeta de propiedades del proyecto (ASP.NET)