Какова лучшая практика создания класса репозитория с кодом EF4 в первую очередь? - PullRequest
5 голосов
/ 22 января 2011

Кажется, есть много способов применить шаблоны репозитория, поэтому мне нужно ваше мнение и хороший четкий ответ о том, что кажется лучшим способом применения шаблона репозитория. Это общий репозиторий? Но есть проблема, когда некоторые доменные объекты не ведут себя так же, как другие. Это указать репозиторий? Как насчет повторения кода между репозиториями? это как комбинация? как насчет использования контейнера di для обоих видов реализации?

Спасибо

Редактировать: я использую orm-структуру: Entity Framework 4. Было бы неплохо иметь пример с EF4.

Ответы [ 2 ]

3 голосов
/ 22 января 2011

Сам шаблон репозитория довольно явный в тех областях, которые требуют спецификации. Остальное не учитывается специально, потому что это зависит от моих внешних факторов, таких как ваш язык программирования, масштаб проекта и ваш личный стиль программирования.

Другими словами: вы, кажется, спрашиваете образец того, как применить шаблон, но в конце концов вам придется принимать свои собственные решения при программировании.

Я постараюсь ответить на ваши более конкретные вопросы:

  • Да, использование Generics - хорошая идея для хранилища. Другой подход заключается в том, чтобы иметь общий интерфейс для всех объектов, которые должны быть сохранены. Вы также можете пойти с обоими, в зависимости от ваших требований.
  • Попытайтесь справиться с различиями в поведении объектов, вызвав полиморфные методы для объектов, подлежащих хранению.
  • Не должно быть повторения кода, если вы все сделаете правильно (с помощью обобщений и / или интерфейсов).
1 голос
/ 23 января 2011

Этот пост Габриэля Шенкера является хорошим объяснением шаблона хранилища. Он реализует это с помощью NHibernate (вы не говорите, какой ORM вы используете) и предоставляет общий базовый репозиторий. Для меня шаблон репозитория очень связан с тестированием и возможностью подделать его или подделать, и этот пост в блоге также показывает, как сделать свою собственную подделку.

По моему опыту, большинство репозиториев имеют некоторые общие функции, например, GetById, Добавить, Удалить. Поэтому полезно иметь базовый класс, который можно наследовать. Там может быть немного сложнее, когда вы начинаете думать о динамических запросах Linq и о том, как их можно протестировать.

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

...