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);
}