Подтвердить что ты не робот

Общий репозиторий - IRepository <T> или IRepository

Я видел два разных подхода для создания родовых репозиториев. Каковы различия между этими двумя подходами (плюсы и минусы)? Пожалуйста, обратите внимание на различия в методах, потому что меня интересует разница между

 public interface IRepository<T> where T : class

и

 public interface IRepository : IDisposable

Есть ли разница в функциональности, гибкости, модульном тестировании...? Что я получу или проиграю? Есть ли какая-то разница в том, как они зарегистрированы в инфраструктурах Injection Dependency?

Вариант 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();
 }

Вариант 2

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

Ответ 1

Самое большое различие заключается в том, что IRepository<T> привязан к одному типу, а IRepository потенциально связан с несколькими типами. Какой из них подходит, сильно зависит от вашего конкретного сценария.

Вообще говоря, я нахожу IRepository<T> более полезным. Во время использования предельно ясно, что такое содержимое IRepository<T> (T). С другой стороны, из данного IRepository не видно, что содержится внутри него.

В случаях, когда мне приходится хранить несколько типов объектов, я обычно создаю карту экземпляров IRepository<T>. Например: Dictionary<T,IRepository<T>>.