Commit fdcb43de by César Galvis

docs: updated backend structure docs

parent 835731a9
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
Dependiendo del framework, se recomienda utilizar patrones de arquitectura con algunas condiciones. 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) - [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) - [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)
├── Utils # Funciones generales del proyecto └── Utils # Utilidades del proyecto
└── WebApi.csproj # Archivo del proyecto de .NET
``` ```
* volver al [inicio](/README.md) * 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