Aller au contenu

Repository

Contexte : Faire le lien entre la couche domaine et la couche de mappage de données en utilisant une interface similaire à une collection pour accéder aux objets du domaine.

public interface IRepository<T>
{
T GetById(int id);
IEnumerable<T> GetAll();
void Add(T entity);
void Remove(T entity);
}
public class InMemoryRepository<T> : IRepository<T>
{
private List<T> _data = new();
public T GetById(int id) => _data.FirstOrDefault(e => e.GetHashCode() == id);
public IEnumerable<T> GetAll() => _data;
public void Add(T entity) => _data.Add(entity);
public void Remove(T entity) => _data.Remove(entity);
}

Abstraction d’accès aux données : Une application utilise IRepository<Customer> ; l’implémentation peut être Entity Framework, Dapper ou un mock pour les tests unitaires. La logique métier est découplée de la source de données.

Exemple : Dans ASP.NET Core, un IRepository<T> générique est souvent utilisé avec DbSet<T> d’EF Core. Le pattern Repository est courant dans l’architecture propre / DDD.