В настоящее время я испытываю несколько различных способов реализации репозиториев в проекте, над которым я работаю, и в настоящее время у меня есть один репозиторий с общими методами, например:
public interface IRepository
{
T GetSingle<T>(IQueryBase<T> query) where T : BaseEntity;
IQueryable<T> GetList<T>(IQueryBase<T> query) where T : BaseEntity;
T Get<T>(int id) where T : BaseEntity;
int Save<T>(T entity) where T : BaseEntity;
void DeleteSingle<T>(IQueryBase<T> query) where T : BaseEntity;
void DeleteList<T>(IQueryBase<T> query) where T : BaseEntity;
}
Таким образом, я могу просто добавить один репозиторий в класс и использовать его, чтобы получить все, что мне нужно.
(кстати, я использую Fluent NHibernate в качестве своего ORM с шаблоном сеанса для каждого веб-запроса и внедряю свой репозиторий с помощью Structuremap)
Кажется, это работает для меня - методы, которые я определил в этом хранилище, делают все, что мне нужно. Но во всем моем поиске в Интернете я не нашел других людей, использующих этот подход, что заставляет меня думать, что я что-то упустил ... Это вызовет у меня проблемы с расширением приложения?
Я читал много людей, говорящих о наличии репозитория на корневую сущность - но если я идентифицирую корневые сущности с некоторым интерфейсом и ограничиваю универсальные методы, чтобы разрешить только классам, реализующим этот интерфейс, то разве я не достигаю того же самого?
заранее спасибо за любые предложения.