Visión general de la arquitectura
Crono utiliza una arquitectura en capas construida sobre ASP.NET Core y Entity Framework Core. Las responsabilidades se dividen en capas y módulos bien definidos para garantizar una separación clara de responsabilidades.
Capa de dominio
Define las entidades y objetos de valor que modelan el negocio. Las entidades viven en Crono.Nucleo y se mapean a la base de datos usando EF Core. La lógica de dominio se mantiene lo más cerca posible de las entidades.
Capa de datos
El acceso a datos se realiza a través de CronoDbContexto, repositorios y paquetes de proveedores ubicados src/Crono.Datos.*. Cada proveedor incluye sus propias migraciones y servicios específicos del dialecto SQL, lo que permite que el núcleo de la aplicación sea agnóstico al motor de base de datos.
Capa de servicios
Los servicios de aplicación orquestan las operaciones del dominio y encapsulan las reglas de negocio. Los servicios se registran mediante inyección de dependencias (Microsoft DI con Autofac) y exponen APIs asíncronas que son consumidas por controladores u otros servicios.
Modelos y validación
Los ViewModels y DTOs están diseñados específicamente para la UI y el área administrativa. La validación de entradas se realiza mediante: DataAnnotations y FluentValidation, esto asegura que solo datos válidos lleguen a la capa de servicios.
Capa de UI
Crono.Web aloja la aplicación ASP.NET Core MVC. Los controladores manejan las solicitudes HTTP, interactúan con los servicios y renderizan vistas Razor. El soporte adicional como Tag Helpers, filtros, y sistema de temas provienen de Crono.Web.Comun
Recursos web estáticos
Los archivos estáticos como JavaScript, CSS e imágenes se encuentran en wwwroot. Durante el proceso de compilación, estos recursos se empaquetan y minifican. Los módulos pueden incluir su propio directorio wwwroot, y dichos recursos se copian a la aplicación en tiempo de ejecución.
Extensibilidad
Las funcionalidades opcionales se empaquetan como módulos en src/Crono.Modulos. Un módulo puede aportar entidades de dominio, servicios, controladores, recursos de UI, esto permite un desarrollo y despliegue aislado y modular.
Los módulos de proveedor de base de datos suministran migraciones de EF Core y servicios específicos del proveedor, permitiendo que el nucleo de la aplicación permanezca independiente del proveedor de base de datos.