У меня есть следующие интерфейсы службы WCF:Образцовый шаблон - это глобальный репозиторий - хорошая идея?
IProductRepository
IFieldRepository
IFieldValueRepository
ICategoryRepository
Я реализовать каждый из них в отдельный проект под названием DatabaseRepository
, в то время как Product
, Field
, FieldValue
и Category
все находятся в общей библиотеке, совместно используемой службой и проектом репозитория.
Продукты содержат поля, которые, в свою очередь, содержат FieldValues. Мне не нравится идея моего конструктора служб, в который входят 4 репозитория, поэтому у меня также есть IGlobalRepository
, который содержит свойство для каждого другого репозитория. Я создаю экземпляр службы, передав конкретную реализацию IGlobalRepository
конструктору, используя привязку на основе Ninject, привязавшуюся ко мне, когда служба размещена в IIS.
Так что на моем веб-службы GetProductsByCategory
выглядит примерно так:
private IGlobalRepository Repo { get; set; }
public IEnumerable<Product> GetProductsByCategory(int CategoryID){
return Repo.ProductRepository.GetByCategory(int CategoryID);
}
Это все хорошо, за исключением того, что продукты имеют поля и поля имеют значения. Означает ли это, что мне нужно передать конкретные реализации IFieldRepository
и IFieldValueRepository
в Repo.ProductRepository
?
Я уверен, что кто-то предположит, что ProductRepository
также должен отвечать за выборку данных поля, но у меня есть это в отдельном репозитории, чтобы я мог получать поля независимо от того, к чему они прикреплены.
Прежде чем я уставился на принятие шаблона хранилища, я бы просто вызвал статический метод в Field или FieldValue, чтобы получить то, что мне нужно. Передача репозиториев кажется гораздо менее элегантным способом работы.
Так теперь мой актуальный вопрос:
Является ли глобальное хранилище хорошая идея? Я понимаю, что это отчасти субъективно, но хотелось бы услышать мнения других, и что более важно, то, что считается лучшей практикой для такого рода сценариев.
Вы пишете модульные тесты в этом проекте? – MattDavey
Да, я. Это фактически существующий проект, который я рефакторинг для использования шаблона репозитория для этой цели. – Maloric
Это 'IGlobalRepository' действительно пахнет единицей работы; ничего плохого в этом. – Steven