32 votes

Référentiel générique - IRepository <T> ou IRepository

J'ai vu deux approches différentes pour la création des référentiels génériques. Quelles sont les différences entre ces deux approches (avantages et inconvénients) ? Veuillez diregard différence dans les méthodes parce que je m'intéresse à la différence entre les

 public interface IRepository<T> where T : class

et

 public interface IRepository : IDisposable

Est-il une différence en termes de fonctionnalité, de flexibilité, de tests unitaires ... ? Que vais-je obtenir ou perdre ?
Est-il une différence de comment ils sont inscrits dans l'Injection de Dépendance des cadres ?

Option 1

 public interface IRepository<T> where T : class
 {
       T Get(object id);
       void Attach(T entity);
       IQueryable<T> GetAll();
       void Insert(T entity);
       void Delete(T entity);
       void SubmitChanges();
 }

Option 2

 public interface IRepository : IDisposable
    {
        IQueryable<T> GetAll<T>();
        void Delete<T>(T entity);
        void Add<T>(T entity);
        void SaveChanges();
        bool IsDisposed();
    }

27voto

JaredPar Points 333733

La plus grande différence est qu' IRepository<T> est lié à un seul type tout en un IRepository est potentiellement lié à plusieurs types. Celle qui est appropriée dépend fortement de votre scénario.

En général je trouve IRepository<T> pour être plus utile. Au temps d'utilisation, il est extrêmement clair que le contenu de IRepository<T> sont (T). D'autre part, il n'est pas clair à partir d'un IRepository ce qui est contenu à l'intérieur.

Dans les cas où j'ai de stocker plusieurs types d'objets, j'ai l'habitude de créer une carte d' IRepository<T> des cas. Par exemple: Dictionary<T,IRepsitory<T>>.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X