Saltar al contenido principal

Repositórios sem Regras de Execução

Repositórios existem para persistência e recuperação de dados. Aqui definimos limites para evitar que lógica de negócio e orquestração contaminem a camada de acesso a dados.

Diretrizes

  • Repositórios tratam apenas da persistência.
  • Não contêm regras de negócio, validações complexas ou orquestração de fluxos.

Contrato no Domain

public interface IOrderRepository
{
Task<Order?> GetByIdAsync(Guid id, CancellationToken ct);
Task AddAsync(Order order, CancellationToken ct);
}

Implementação em Infra com EF Core

public sealed class AppDbContext : DbContext
{
public DbSet<Order> Orders => Set<Order>();
}

public sealed class EfOrderRepository : IOrderRepository
{
private readonly AppDbContext db;
public EfOrderRepository(AppDbContext db) => this.db = db;

public Task<Order?> GetByIdAsync(Guid id, CancellationToken ct)
=> db.Orders.AsNoTracking().FirstOrDefaultAsync(o => o.Id == id, ct)!;

public Task AddAsync(Order order, CancellationToken ct)
=> db.Orders.AddAsync(order, ct).AsTask();
}

Anti‑exemplo (o que evitar)

// Regra de negócio dentro do repositório — proibido
public Task ApproveAndSaveAsync(Order order)
{
if (!order.CanApprove()) throw new InvalidOperationException(); // regra
// ... persistência
}