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

Один или несколько классов репозитория?

Моя база данных относительно небольшая, 8 таблиц, каждая из которых имеет менее 5 столбцов. Я использую EF. Я создал единственный класс репозитория, но теперь, когда я думаю, что это может быть неправильный способ его использования. Должен ли я иметь отдельный класс репозитория для каждого из моих контроллеров? Допустим, у меня есть продукты, пользователи, единороги, было бы хорошо, чтобы один класс репозитория работал со всеми этими и создавал экземпляр в каждом из этих контроллеров, или я должен создать отдельный класс репозитория для каждого из них?

4b9b3361

Ответ 1

Одной из основных концепций DDD является совокупный корень - это сущность "верхнего уровня", через которую вы управляете целыми наборами связанных объектов.

Например, в розничном сценарии "Заказ" представляет собой совокупный корень, через который вы можете получить доступ к самому Заказу, списку OrderItems (например, Product + Amount + модификаторы, такие как скидки), BillingAddress, ShippingAddress и PaymentMethod. Каждый из них тесно связан с самим заказом, до того момента, когда у них нет причин существовать вне сферы действия заказа.

Каждый корень агрегата должен иметь репозиторий, которому принадлежит ответственность за сохранение всего подграфа объектов под корнем. Таким образом, в приведенном выше примере вам не нужен или нужен репозиторий для OrderItems, который позволяет независимо обращаться к элементам заказа; вместо этого вы должны реализовать единый OrdersRepository, который имеет дело с Orders и всеми их подкомпонентами как единое целое.

В зависимости от вашей конкретной модели домена вам может понадобиться один или несколько репозиториев, но, конечно, не один тип сущности. Ключевой вопрос, который нужно задать при поиске совокупных корней, - "имеет ли этот объект свою собственную идентификацию и жизненный цикл?" Заказы, OrderItems нет.

Ответ 2

Think Domain-Driven Design, и имея это в виду, вы разделяете логическую структуру своего проекта не только на классы, но также как и домены, что означает, что все операции связаны с Product, расположены в пределах ProductsController и, следовательно, в пределах ProductsRepository, поэтому я предпочитаю много репозиториев, каждый из которых оснащен операциями для решения некоторых аспектов вашего проекта.

Не все аспекты могут нуждаться в репозитории, но это то, что вы решаете.

Ответ 3

Я не думаю, что репоистория на сущность - хорошая идея, а скорее репозиторий на услугу, если это имеет смысл.

например, я бы не пошел и не создавал КатегорииRepository или CarsRepository, если основное внимание в приложении сосредоточено на Пользователях.