Skip to content

🚀 [EPIC] _1 Refactor: Implementar IQueryable y Ejecución Diferida en Capa de Servicios para Optimización de Consultas #1

@jherraizsoler

Description

@jherraizsoler

[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 DbSet con .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)


📋 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 IQueryable en 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 WHERE y OFFSET / FETCH nativas.
  • Arquitectura Escalable: Base técnica para integración con agentes de IA y Big Data.

Metadata

Metadata

Assignees

Labels

architectureStructural changes impacting scalability and design patterns (Clean Architecture, IQueryable).backendTasks strictly related to server-side logic, APIs, services, and data persistence layer.enhancementNew feature or requestperformanceCritical optimizations for memory management (RAM) and database query efficiency.refactorCode changes that improve maintainability and readability without altering external behavior.

Projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions