-
Notifications
You must be signed in to change notification settings - Fork 0
Description
[Epic] _1 Refactor: Implementar IQueryable y Ejecución Diferida en Capa de Servicios para Optimización de Consultas
📝 Contexto
Actualmente, los métodos de listado (GetAll) en los servicios de la arquitectura están retornando IEnumerable<T>. Esto provoca que las consultas se ejecuten de forma inmediata en la memoria del servidor, limitando la escalabilidad y eficiencia al manejar volúmenes de datos crecientes (Big Data).
🎯 Objetivo
Refactorizar los servicios y controladores de los módulos core para utilizar IQueryable<T>, permitiendo que el motor de base de datos sea el encargado de filtrar, paginar y ordenar los datos antes de enviarlos a la aplicación.
🛠️ Detalles de Implementación (Diferencias Técnicas)
❌ Antes (Enfoque Ineficiente)
Carga toda la tabla en RAM y luego filtra en el servidor C#.
// IEnumerable ejecuta el SQL inmediatamente (Select *)
public async Task<IEnumerable<Product>> GetAllAsync() {
return await _context.Products.ToListAsync();
}✅ Ahora (Optimización )
El filtrado ocurre en el motor SQL. Solo viajan los datos necesarios por la red, permitiendo que la composición de la consulta sea dinámica hasta el último momento.
// IQueryable permite añadir .Where(), .Include() o .Take() antes de ir a la base de datos
public IQueryable<Product> GetAll()
{
return _context.Products.AsNoTracking();
}✅ Tareas a Realizar
- Interfaces: Modificar los contratos para retornar
IQueryable<T>. - Servicios: Implementar Deferred Execution devolviendo el
DbSetcon.AsNoTracking(). - Controladores: Mover la ejecución asíncrona (
.ToListAsync()) a los controladores para permitir filtros dinámicos. - Testing: Actualizar la suite de pruebas en xUnit para validar compatibilidad con el nuevo flujo.
📊 Progreso de Modelos Refactorizados (Sprint Actual)
- [Task] ProductModule: Implementación de IQueryable y Eager Loading. #2
- [Task] CategoryModule: Implementación de IQueryable y Búsqueda Dinámica #3
- [Task] UserModule: Optimización de Consultas Administrativas y Proyecciones #4
- [Task] CartModule: Refactorización de Navegación Compleja (Cart -> Items -> Product) #5
- [Task] BrandModule: Migración a IQueryable y limpieza de Interfaces #6
📋 Modelos en el Dominio (Pendientes de Implementación API/Service)
Basado en la arquitectura definida en Models/:
Logística / Stock
- Warehouse
- WarehouseProduct
- Inventory
- Store
Ventas / Órdenes
- Order
- OrderItem
Catálogo Extendido
- Collection
- ProductImage
- ProductVariant
Seguridad
- Role
- UserRole
Nota: Estos modelos se integrarán en futuros Issues una vez establecida la base de alto rendimiento con
IQueryableen los módulos core.
🚀 Beneficios Esperados
- Reducción del consumo de RAM: Evita el volcado innecesario de tablas completas.
- Consultas SQL Optimizadas: Generación de cláusulas
WHEREyOFFSET / FETCHnativas. - Arquitectura Escalable: Base técnica para integración con agentes de IA y Big Data.
Metadata
Metadata
Assignees
Labels
Projects
Status