Skip to main content

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.

info

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.