$mermaidjs
Clean Architecture Demo
Loading...
Searching...
No Matches
TaskManagement.Infrastructure.Persistence.Repositories.TaskRepository Class Referencesealed

TaskRepository es el repositorio de escritura para entidades TaskItem. More...

Inheritance diagram for TaskManagement.Infrastructure.Persistence.Repositories.TaskRepository:
Collaboration diagram for TaskManagement.Infrastructure.Persistence.Repositories.TaskRepository:

Public Member Functions

 TaskRepository (TaskDbContext dbContext)
 
async Task< TaskItem?> GetByIdAsync (Guid id, CancellationToken cancellationToken=default)
 
async Task< IReadOnlyList< TaskItem > > GetByAssigneeAsync (Guid userId, CancellationToken cancellationToken=default)
 
async Task< IReadOnlyList< TaskItem > > GetOverdueAsync (CancellationToken cancellationToken=default)
 
async Task AddAsync (TaskItem task, CancellationToken cancellationToken=default)
 
void Update (TaskItem task)
 
void Delete (TaskItem task)
 

Detailed Description

TaskRepository es el repositorio de escritura para entidades TaskItem.

Rol en Clean Architecture:

  • Parte de la capa de Infraestructura
  • Implementa interfaz ITaskRepository -definida en Capa del dominio-
  • Implementación de acceso a datos: Traduce operaciones del dominio a consultas de base de datos
  • Inversión de dependencia: El dominio depende de interfaz, no de esta implementación

Beneficios del patrón Repository:

  • Abstrae detalles de Entity Framework de capas del dominio y aplicación
  • Proporciona API orientada al dominio -no enfocada en consultas-
  • Habilita pruebas unitarias a través de implementaciones simuladas
  • Permite intercambiar tecnología de base de datos sin cambiar código de aplicación

Operaciones de Escritura vs Operaciones de Lectura:

  • Este repositorio: Operaciones de escritura -Add, Update, Delete-
  • TaskReadRepository: Operaciones de lectura -consultas optimizadas-
  • Separación sigue CQRS: Estrategias diferentes para lecturas y escrituras

Detalles de Implementación:

  • Utiliza Entity Framework Core para acceso a base de datos
  • Usa AsNoTracking para consultas de sólo lectura -GetByIdAsync, GetByAssigneeAsync, GetOverdueAsync-
  • Seguimiento habilitado para operaciones de escritura -AddAsync, Update, Delete-
  • Devuelve colecciones inmutables -IReadOnlyList- para prevenir modificaciones de cliente

Métodos:

  • GetByIdAsync: Encontrar tarea por ID -lectura-
  • GetByAssigneeAsync: Encontrar tareas asignadas a usuario -lectura-
  • GetOverdueAsync: Encontrar tareas incompletas vencidas -lectura-
  • AddAsync: Persistir nueva entidad de tarea -escritura-
  • Update: Marcar entidad existente para actualización -escritura-
  • Delete: Marcar entidad existente para eliminación -escritura-

Definition at line 53 of file TaskRepository.cs.

Constructor & Destructor Documentation

◆ TaskRepository()

TaskManagement.Infrastructure.Persistence.Repositories.TaskRepository.TaskRepository ( TaskDbContext  dbContext)

Definition at line 56 of file TaskRepository.cs.

Member Function Documentation

◆ AddAsync()

async Task TaskManagement.Infrastructure.Persistence.Repositories.TaskRepository.AddAsync ( TaskItem  task,
CancellationToken  cancellationToken = default 
)

◆ Delete()

void TaskManagement.Infrastructure.Persistence.Repositories.TaskRepository.Delete ( TaskItem  task)

◆ GetByAssigneeAsync()

async Task< IReadOnlyList< TaskItem > > TaskManagement.Infrastructure.Persistence.Repositories.TaskRepository.GetByAssigneeAsync ( Guid  userId,
CancellationToken  cancellationToken = default 
)

◆ GetByIdAsync()

async Task< TaskItem?> TaskManagement.Infrastructure.Persistence.Repositories.TaskRepository.GetByIdAsync ( Guid  id,
CancellationToken  cancellationToken = default 
)

◆ GetOverdueAsync()

async Task< IReadOnlyList< TaskItem > > TaskManagement.Infrastructure.Persistence.Repositories.TaskRepository.GetOverdueAsync ( CancellationToken  cancellationToken = default)

◆ Update()

void TaskManagement.Infrastructure.Persistence.Repositories.TaskRepository.Update ( TaskItem  task)

The documentation for this class was generated from the following file: