API REST construida con .NET 8 siguiendo los principios de Clean Architecture, CQRS y Domain-Driven Design (DDD). Haciendo pruebas para ver si funciona en Actions...
Este proyecto implementa Clean Architecture con las siguientes capas:
┌─────────────────────────────────────────┐
│ API Layer │ ← Presentación (Controllers, Middleware)
├─────────────────────────────────────────┤
│ Application Layer │ ← Casos de Uso (CQRS, Handlers)
├─────────────────────────────────────────┤
│ Domain Layer │ ← Lógica de Negocio (Entities, Rules)
├─────────────────────────────────────────┤
│ Infrastructure Layer │ ← Implementaciones (DB, Services)
└─────────────────────────────────────────┘
Testeando cambios para ver si funciona
- ✅ Clean Architecture: Separación de responsabilidades en capas
- ✅ CQRS: Separación de comandos y consultas
- ✅ DDD: Domain-Driven Design con entidades ricas
- ✅ SOLID: Principios de diseño orientado a objetos
- ✅ Repository Pattern: Abstracción del acceso a datos
- ✅ Unit of Work: Gestión de transacciones
- ✅ Dependency Injection: Inversión de dependencias
service-api-csharp/
├── service-api-csharp.Domain/ # Entidades, Value Objects, Interfaces
├── service-api-csharp.Application/ # Casos de Uso, DTOs, Validators
├── service-api-csharp.Infrastructure/ # EF Core, Repositories, Services
├── service-api-csharp.API/ # Controllers, Middleware, Filters
├── tests/ # Pruebas (Unit, Integration, E2E)
├── docs/ # Documentación
├── docker/ # Configuración Docker
└── scripts/ # Scripts de utilidad
Para más detalles, consulta la documentación de la estructura.
- .NET 8 - Framework principal
- ASP.NET Core - Web API
- Entity Framework Core - ORM
- MediatR - Patrón Mediator para CQRS
- AutoMapper - Mapeo de objetos
- FluentValidation - Validación de datos
- PostgreSQL / SQL Server - Base de datos relacional
- Redis - Caché distribuida (opcional)
- JWT - JSON Web Tokens
- ASP.NET Core Identity - Gestión de usuarios
- Swagger/OpenAPI - Documentación de API
- xUnit - Framework de pruebas
- Moq - Mocking
- FluentAssertions - Assertions fluidas
- Docker - Contenedorización
- GitHub Actions - CI/CD
- .NET 8 SDK
- PostgreSQL o SQL Server
- Docker (opcional)
- Visual Studio 2022 o VS Code
git clone https://github.com/tu-usuario/service-api-csharp.git
cd service-api-csharpEdita el archivo appsettings.json en service-api-csharp.API:
{
"ConnectionStrings": {
"DefaultConnection": "Host=localhost;Database=servicedb;Username=postgres;Password=tu_password"
}
}cd service-api-csharp.API
dotnet ef database updatedotnet runLa API estará disponible en:
- HTTP:
http://localhost:5000 - HTTPS:
https://localhost:5001 - Swagger:
https://localhost:5001/swagger
docker-compose up -dEsto iniciará:
- API en
http://localhost:8080 - PostgreSQL en
localhost:5432 - pgAdmin en
http://localhost:5050(opcional)
docker build -t service-api-csharp .- Estructura del Proyecto
- Diagrama de Arquitectura
- Guía de Desarrollo (próximamente)
- API Documentation (próximamente)
dotnet testdotnet test /p:CollectCoverage=true /p:CoverletOutputFormat=opencover- Unit Tests: Pruebas unitarias de lógica de negocio
- Integration Tests: Pruebas de integración con base de datos
- E2E Tests: Pruebas de extremo a extremo
<!-- Application Layer -->
<PackageReference Include="MediatR" Version="12.2.0" />
<PackageReference Include="AutoMapper" Version="12.0.1" />
<PackageReference Include="FluentValidation" Version="11.9.0" />
<!-- Infrastructure Layer -->
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="8.0.0" />
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="8.0.0" />
<PackageReference Include="Serilog.AspNetCore" Version="8.0.0" />
<!-- API Layer -->
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.5.0" />
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="8.0.0" />dotnet ef migrations add NombreMigracion --project service-api-csharp.Infrastructure --startup-project service-api-csharp.APIdotnet ef database update PreviousMigration --project service-api-csharp.Infrastructure --startup-project service-api-csharp.APIdotnet clean
dotnet build- ✅ Clean Architecture con separación de capas
- ✅ CQRS con MediatR
- ✅ Validación automática con FluentValidation
- ✅ Mapeo automático con AutoMapper
- ✅ Documentación con Swagger/OpenAPI
- ✅ Autenticación JWT
- ✅ Logging estructurado con Serilog
- ✅ Manejo global de excepciones
- ✅ Paginación y filtrado
- ✅ Soft Delete
- ✅ Auditoría automática (CreatedAt, UpdatedAt)
- ✅ Unit of Work pattern
- ✅ Repository pattern
- ✅ Specification pattern
- ✅ Domain Events
- Entidades:
Product,User,Order - Interfaces:
IProductRepository,IEmailService - DTOs:
ProductDto,CreateProductDto - Commands:
CreateProductCommand,UpdateProductCommand - Queries:
GetProductByIdQuery,GetProductsListQuery - Handlers:
CreateProductCommandHandler,GetProductByIdQueryHandler - Validators:
CreateProductCommandValidator
- Organización vertical por Features (no por tipo de archivo)
- Cada feature contiene sus Commands, Queries, DTOs y Validators
- Código compartido en carpetas
Common
- Fork el proyecto
- Crea una rama para tu feature (
git checkout -b feature/AmazingFeature) - Commit tus cambios (
git commit -m 'Add some AmazingFeature') - Push a la rama (
git push origin feature/AmazingFeature) - Abre un Pull Request
Este proyecto está bajo la Licencia MIT. Ver el archivo LICENSE para más detalles.
- Tu Nombre - Desarrollo inicial - tu-usuario
- Clean Architecture por Robert C. Martin
- CQRS Pattern por Martin Fowler
- Domain-Driven Design por Eric Evans
- Email: tu-email@ejemplo.com
- LinkedIn: tu-perfil
- GitHub: @tu-usuario
⭐ Si este proyecto te fue útil, considera darle una estrella en GitHub!