Commit fdcb43de by César Galvis

docs: updated backend structure docs

parent 835731a9
......@@ -2,7 +2,7 @@
Dependiendo del framework, se recomienda utilizar patrones de arquitectura con algunas condiciones.
Antes de analizar los patrones de arquitectura, se recomienda entender el funcionamiento de los siguientes principios y patrones de diseño:
Se recomienda entender el funcionamiento de los siguientes principios y patrones de diseño:
- [Principios SOLID](https://www.digitalocean.com/community/conceptual-articles/s-o-l-i-d-the-first-five-principles-of-object-oriented-design)
- [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
### 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
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
4. **WebApi:** Capa de presentación
Este patrón de arquitectura utiliza las siguientes capas:
1. **Core**
2. **Application**
3. **Infrastructure**
4. **WebApi**
Se recomienda que la estructura de carpetas de la solución sea así:
```sh
.
├── .env # Archivo con variables de entorno
├── *.sln # Archivo de la solución de .NET
└── src # Código fuente
├── .env # Archivo con variables de entorno
├── *.sln # Archivo de la solución de .NET
└── src # Código fuente
   ├── Application
   ├── Core
   ├── Infrastructure
   └── WebApi
```
Se recomienda que cada capa/proyecto tenga la siguiente estructura de carpetas:
#### 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
Core
├── Constants # Clases con datos constantes
├── DTOs # Clases de tipo DTO
├── Entities # Clases de tipo Entidad
├── Enums # Clases con enumeraciones
├── Helpers # Clases generales que no son ni DTOs ni entidades (objetos planos)
├── Interfaces # Interfaces generales del sistema
└── Core.csproj # Archivo del proyecto de .NET
src/Core
├── Core.csproj # Archivo del proyecto de .NET
├── Domain # Archivos del dominio
│   ├── Constants # Clases con constantes
│   ├── Entities # Clases de tipo Entidad
│   ├── Enums # Clases con enumeraciones
│   └── Utils # Clases generales que no son ni DTOs ni entidades (objetos planos)
└── Interfaces # Interfaces generales del sistema
```
#### 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
Application
├── Interfaces # Interfaces generales del sistema
├── Mappings # Clases para mapeo de entidades y DTOs
├── Services # Servicios del sistema
├── Specifications # Especificaciones de consultas en bases de datos
├── Utils # Funciones generales del sistema
├── Validators # Reglas de validaciones de clases
└── Application.csproj # Archivo del proyecto de .NET
src/Application
├── Application.csproj # Archivo del proyecto de .NET
├── DTOs # Clases de tipo DTO
├── Interfaces # Interfaces generales del sistema
├── Mappings # Clases para mapeo de entidades y DTOs
├── Services # Servicios del sistema
├── Specifications # Especificaciones de consultas en bases de datos
├── Utils # Utilidades generales del sistema
└── Validators # Reglas de validaciones de clases
```
#### Proyecto `Infrastructure`
Capa en donde se manejarán conexiones con bases de datos y sistemas externos.
```sh
Infrastructure
├── Integrations # Archivos para los sistemas externos
├── Persistence # Archivos para la base de datos principal (SQL)
│ ├── Config # Archivos de configuración
│ │   ├── DependencyRegistry # Archivos de configuración de registro de dependencias
│ │   └── Entities # Archivos de configuración de entidades de la base de datos
│ ├── GeneralContext.cs # Contexto de base de datos (SQL)
│ ├── Migrations # Migraciones de la base de datos
│ └── Repositories # Repositorios de las entidades
└── Infrastructure.csproj # Archivo del proyecto de .NET
src/Infrastructure
├── Infrastructure.csproj # Archivo del proyecto de .NET
├── Integrations # Archivos de configuración de sistemas externos
└── Persistence # Archivos para la base de datos principal (SQL)
├── Config # Archivos de configuración
│   ├── DependencyRegistry # Archivos de configuración para registro de dependencias
│   └── Entities # Archivos de configuración de entidades de la base de
├── GeneralContext.cs # Contexto de base de datos (SQL)
├── Migrations # Migraciones de la base de datos
└── Repositories # Repositorios de las entidades
```
#### Proyecto `WebApi`
```sh
WebApi
src/WebApi
├── WebApi.csproj # Archivo del proyecto de .NET
├── 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)
│   └── LoggerSetup # Archivos de configuración del sistema de registros (logs)
├── Controllers # Controladores del proyecto
│   ├── Rest # Controladores REST
│   └── 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
├── Program.cs # Clase principal del proyecto
├── Properties # Carpeta de propiedades del proyecto (ASP.NET)
├── Utils # Funciones generales del proyecto
└── WebApi.csproj # Archivo del proyecto de .NET
└── Utils # Utilidades del proyecto
```
* volver al [inicio](/README.md)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment