Я в настоящее время опробовать несколько различных способов реализации хранилищ в проекте я работаю, и в настоящее время имеют единое хранилище с обобщенными методами на нем что-то вроде этого:Единый репозиторий с общими методами ... плохая идея?
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)
Это, кажется, работает для меня - методы Я определил в этом репозитории все, что мне нужно. Но во всех моих веб-поисках я не нашел других людей, использующих этот подход, что заставляет меня думать, что я что-то упустил ... Неужели это вызовет у меня проблемы, когда я вырасту свое приложение?
Я читал много людей, говорящих о наличии репозитория для каждого корневого объекта, но если я определяю корневые объекты с каким-то интерфейсом и ограничиваю общие методы только тем, чтобы классы, реализующие этот интерфейс, тогда я не достигаю того же самого ?
Заранее благодарим за любые предложения.
Это вопрос, основанный на мнениях. Все ответы пока подтверждают то же самое. С небольшими изменениями этот вариант подходит для https://softwareengineering.stackexchange.com/. –