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
}