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 ?