This content originally appeared on DEV Community and was authored by Beto Ramirez
Para cualquier desarrollador de .NET, iniciar un nuevo proyecto implica una serie de decisiones cruciales sobre la arquitectura. ¿Cómo aseguramos que la aplicación sea mantenible, escalable y, sobre todo, fácil de probar? La Arquitectura Limpia (Clean Architecture) nos ofrece una solución robusta, y con el template CoreDriven, he querido llevar esa implementación un paso más allá.
Este post explora las características de Core-Driven, un template de proyecto en .NET Core diseñado para programadores que buscan una base sólida y moderna para sus aplicaciones.
El Fundamento: Arquitectura Limpia
CoreDriven se basa en los principios de la Arquitectura Limpia, garantizando una clara separación de responsabilidades. El dominio y la lógica de negocio (los casos de uso) están en el centro, sin dependencias de frameworks externos como Entity Framework o ASP.NET Core.
Esto se traduce en beneficios directos:
Independencia: Tu lógica de negocio no sabe nada sobre la base de datos, la UI o cualquier servicio externo.
Testabilidad: Probar las reglas de negocio se vuelve trivial, ya que no requieren un entorno web o una base de datos activa.
Mantenibilidad: Cambiar un detalle de infraestructura (como pasar de SQL Server a PostgreSQL) no afecta al corazón de tu aplicación.
Casos de Uso, una Sintaxis más Limpia
Una de las decisiones de diseño en CoreDriven es cómo se estructuran los casos de uso (Use Cases). En lugar de usar una sola clasepara multiples funcionalidades, hacemos uso de una clase para solamente una solan funcinalidad, esto hara que el caso de uso tenga una forma lógica y concisa.
Observa la diferencia. La implementación de un caso de uso se agrupa dentro de un solo archivo, mejorando la cohesión y la legibilidad.
Este enfoque no solo reduce el número de archivos, sino que también hace que la navegación y la comprensión del flujo de una feature sean mucho más intuitivas.
Ahora bien, en la capa de casos de uso podemos agruparlos con un nombre descriptivo que nos diga exactamente que es lo que el caso de uso resulve.
Por ejemplo, en un TodoList, el caso de uso de creacion puede contener los archivos de Creacion del Todo, el Request, Response y las validaciones.
Y asi podemos listar todos los casos de uso para la entidad Todo.
La agrepacion de todos los casos de uso correspondiente a Todo la haremos con record que contega todos los casos de uso y que ademas implmente la interfaz IUseCaseRepository.
Inyección de Dependencias Automática con Scrutor.
Configurar la inyección de dependencias puede ser tedioso. Registrar cada servicio y su interfaz (services.AddScoped()) en proyectos grandes consume tiempo y es propenso a errores.
Con este enfoque CorDriven camos a hacer uso de Scrutor, una pequeña pero potente librería que automatiza este proceso mediante el escaneo de ensamblados. Con unas pocas líneas de código, todos tus servicios, handlers y validadores de FluentValidation quedan registrados.
Vamos a definir dos interfaces que solo seran indicadores para que Scrutor sepa donde buscar.
La interfaz IUseCase y la interfaz IUseIUseCaseRepository
Ahora cada uno de nuestros casos de uso pueden hacer uso de la interfaz IUseCase y el record que agrupa a todos los use cases hara uso de la interfaz IUseCaseRepository.
Esto hara que la inyeccion de dependencias con Scrutor sea muy simple:
Pruebas Unitarias Simples y Confiables.
Gracias a la arquitectura desacoplada, probar nuestros casos de uso es increíblemente fácil. No necesitamos mocks complejos ni configuraciones aparatosas. La lógica de negocio está aislada y lista para ser validada.
La prueba es limpia, legible y se enfoca exclusivamente en la lógica del caso de uso, validando su comportamiento de forma aislada.
Si buscas una base sólida, moderna y bien estructurada para tu próximo proyecto en .NET, te invito a que le des una oportunidad a CoreDriven.
Visita el repositorio en GitHub: https://github.com/betoramiz/coredriven
¡Clónalo y empieza a construir!
Cualquier feedback, sugerencia o contribución es más que bienvenida. ¡Espero que este template te ayude a construir software increíble!
This content originally appeared on DEV Community and was authored by Beto Ramirez