Repository générique
Lorsque l'on a à interroger plus d'une entité, il convient de factoriser son code afin d'en réduire le nombre de lignes (maintenance, évolution, ...).
Pour cela, on peut utiliser un repository générique qui consiste à factoriser les fonctions les plus communes, à savoir : Get, Delete, Save, GetAll, voire Find en utilisant une expression (lire ce billet sur les find). On peut alors représenter cela au travers d'une interface générique, socle qui sera à compléter pour des besoins plus spécifiques.
public interface IRepository<T> { T GetById(int id); void Save(T entite); void Delete(T entite); List<T> GetAll(); List<T> Find(Func<T, bool> expression); }
ou mieux, si l'on souhaite un type generic pour l'ID de nos entités :
public interface IRepository<T,TId> { T GetById(TId id); void Save(T entite); void Delete(T entite); List<T> GetAll(); List<T> Find(Func<T, bool> expression); }