# Instrucciones de Copilot para Proyectos .NET Web API ## Requisitos de Proceso Importantes - SIEMPRE presenta un plan detallado y espera aprobación explícita antes de implementar cualquier cambio de código - No proceder con la implementación hasta recibir confirmación del usuario - Al presentar el plan, proporciona un desglose paso a paso de todos los archivos a crear o modificar - Pregunta directamente: "¿Apruebas este plan antes de proceder con la implementación?" ## Convenciones de Nomenclatura ### Patrones Generales de Nomenclatura | Tipo de Elemento | Patrón/Estilo | Ejemplo(s) | |------------------|---------------|------------| | **Clases** | `PascalCase` | `UserService`, `ProductController` | | **Interfaces** | `IPascalCase` | `IUserService`, `IRepository` | | **Métodos** | `PascalCase` | `GetUserById()`, `CreateAsync()` | | **Propiedades** | `PascalCase` | `UserId`, `FirstName` | | **Variables Locales** | `camelCase` | `userId`, `totalAmount` | | **Parámetros** | `camelCase` | `userId`, `requestModel` | | **Campos Privados** | `_camelCase` | `_userService`, `_logger` | | **Constantes** | `PascalCase` | `MaxRetryAttempts`, `DefaultTimeout` | | **Enums** | `PascalCase` | `UserStatus`, `OrderType` | | **Namespaces** | `PascalCase.PascalCase` | `MyApp.Services`, `MyApp.Models` | ### Mejores Prácticas de Nomenclatura - Usar nombres descriptivos y completos (evitar abreviaciones como `Usr`, `Mgr`) - Para métodos booleanos, usar prefijos como `Is`, `Has`, `Can`, `Should` - Para métodos async, usar sufijo `Async` - Para controladores, usar sufijo `Controller` - Para servicios, usar sufijo `Service` - Para DTOs, usar sufijos como `Dto`, `Request`, `Response` - Evitar nombres que coincidan con palabras reservadas de C# ## Estilo de Código ### Formato y Estructura - Usar **4 espacios** para indentación - Usar **Allman style** para llaves (nueva línea) - Longitud máxima de línea: **120 caracteres** - Usar **EditorConfig** para mantener consistencia - Configurar **StyleCop** y **Roslyn Analyzers** ```csharp // Correcto - Allman style public class UserService { private readonly IUserRepository _userRepository; public UserService(IUserRepository userRepository) { _userRepository = userRepository; } } ``` ## Arquitectura de Proyecto ### Estructura de Carpetas Recomendada ``` src/ ├── MyApp.Api/ # Capa de presentación │ ├── Controllers/ │ ├── Middleware/ │ ├── Program.cs │ └── appsettings.json ├── MyApp.Application/ # Lógica de aplicación │ ├── Services/ │ ├── DTOs/ │ ├── Interfaces/ │ └── Validators/ ├── MyApp.Domain/ # Lógica de dominio │ ├── Entities/ │ ├── Enums/ │ └── ValueObjects/ ├── MyApp.Infrastructure/ # Acceso a datos │ ├── Data/ │ ├── Repositories/ │ └── Configurations/ └── MyApp.Tests/ # Pruebas unitarias ``` ### Patrones de Arquitectura - **Clean Architecture** con separación clara de responsabilidades - **Repository Pattern** para acceso a datos - **Dependency Injection** para inversión de control - **CQRS** para operaciones complejas - **Unit of Work** para transacciones