Pattern Repository et Unit of Work - Détail du Pattern Repository

Plongée dans le pattern Repository : comment il simplifie l’accès aux données et centralise la logique grâce à un exemple avec Entity Framework Core.

Sommaire

Cet article fait partie d'une série de plusieurs articles sur les patterns Repository et Unit of Work :

Pattern Repository : Simplifier l’accès aux données

Le Pattern Repository crée une couche d’abstraction entre l’application et la source de données. Il permet de centraliser la logique d’accès aux données et d’éviter la duplication du code.

Exemple d’interface générique

Voici une implémentation simple d’un repository générique :

public interface IRepository<T> where T : class
{
    Task<T?> GetByIdAsync(int id);
    Task<IEnumerable<T>> GetAllAsync();
    Task AddAsync(T entity);
    void Update(T entity);
    void Delete(T entity);
}

Implémentation avec Entity Framework Core

Un repository pour une entité spécifique peut être dérivé de cette interface :

public class Repository<T> : IRepository<T> where T : class
{
    private readonly DbContext _context;
    private readonly DbSet<T> _dbSet;

    public Repository(DbContext context)
    {
        _context = context;
        _dbSet = context.Set<T>();
    }

    public async Task<T?> GetByIdAsync(int id) => await _dbSet.FindAsync(id);

    public async Task<IEnumerable<T>> GetAllAsync() => await _dbSet.ToListAsync();

    public async Task AddAsync(T entity) => await _dbSet.AddAsync(entity);

    public void Update(T entity) => _dbSet.Update(entity);

    public void Delete(T entity) => _dbSet.Remove(entity);
}

Ce pattern améliore la lisibilité et réduit la répétition de la logique d’accès aux données dans l’application.

A suivre : Détail du Pattern Unit of Work