Как реализовать это с помощью шаблона репозитория (или чего-то более подходящего)?

У меня есть репозиторий под названием: IChocolateRepository

Он является производным от общего интерфейса репозитория IRepository‹>, который определяет основные функции репозитория (FindAll, Delete, Add и т. д.).

Теперь мне нужно написать фрагмент кода, который будет удалять «все шоколадные конфеты из базы данных с данными о сроке годности до указанной даты» (при условии, что ExpiryDate является необнуляемым свойством в классе модели Chocolate.)

Это место в репозитории?

Кроме того, как будет выглядеть пример реализации? (Я использую EF CTP5)




Ответы (3)


Я так не думаю.

Это относится не к Repository, а к классу, который управляет Transactions, используя эти Repositories.

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

person decyclone    schedule 29.01.2011

Если у вас уже есть метод Remove(T item) в базовом интерфейсе, не повредит, если вы добавите Remove(Predicate‹'T'> condition) для удовлетворения ваших потребностей.

Поэтому вместо удаления одного конкретного элемента у вас может быть очень общий интерфейс для удаления всего, что удовлетворяет заданному предикату.

person Andrey Taptunov    schedule 29.01.2011

У меня был небольшой проект (FYP для университетского диплома), и из-за нехватки времени и того, что я не знал лучше, я добавил свои более сложные методы данных в репозиторий, жестко запрограммированные.

Лично я бы использовал идею Андрея Таптунова с предикатами, чтобы код доступа к данным содержался внутри класса репозитория. Я видел транзакции, написанные в книге по проектированию, ориентированной на предметную область, которые в любом случае работают как предикаты. Транзакция записывает то, чего вы хотите достичь, и репозиторий работает с этим запросом.

person JonWillis    schedule 29.01.2011