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 :
- Introduction générale et utilité des patterns dans les projets d'entreprise
- Détail du Pattern Repository
- Détail du Pattern Unit of Work
- Compatibilité et limitations avec les microservices
- Exemple concret : Utilisation conjointe dans une plateforme e-commerce
- Conclusion et retour d'expérience
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