Aller au contenu principal
Nicolas Cousin Tech SolutionsNicolas Cousin Tech Solutions
Module 2 sur 6

Détail du Pattern Repository

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.

Vérifiez votre compréhension

Dans l'exemple du module, que fait la méthode GetByIdAsync ?

Pourquoi utiliser une interface IRepository<T> plutôt qu'une implémentation directe ?