Мы начинаем разрабатывать небольшую инфраструктуру в нашей компании для обмена кодом между различными приложениями.Для доступа к данным мы используем EF4.У нас есть собственный класс DbContext и универсальный репозиторий:
public class RMDbContext : DbContext
{
// ....
}
public interface IRepository
{
IQueryable<T> All();
void Delete(T entity) where T : class;
void Add(T entity) where T : class;
void Update(T entity) where T : class;
int SaveChanges();
void RollbackChanges();
}
Проблема заключается в том, как реализовать репозиторий, используя наш собственный класс DbContext (RMDbContext).Мой коллега считает, что лучше всего позволить RMDbContext реализовать интерфейс IRepository:
public class RMDbContext : DbContext, IRepository
{
// ....
}
Если честно, мне не нравится этот подход, поскольку контекст привязан к конкретному контракту (IRepository),IMO, лучше создать реализацию репозитория, которая использует RMDbContext, что-то вроде этого:
public class Repository<T> : IRepository where T : RMDbContext, new()
{
protected readonly RMDbContext context;
public class Repository()
{
context = new T();
}
// ....
}
Что вы думаете об этих двух подходах?Какой бы вы выбрали и почему?