Репозиторий всегда зависит от технологии доступа к данным.Это причина, по которой люди используют репозитории - чтобы обернуть зависимость доступа к данным в отдельный слой.Если вы решите изменить технологию доступа к данным (я думаю, что это вероятно с 1% вероятностью), вам придется создавать новые репозитории, реализующие те же интерфейсы, что и прежние.
Представление репозиториев добавит новый уровеньсложность.У репозиториев есть свои плюсы и минусы.Представляем их только потому, что «вы можете изменить подход к доступу к данным в будущем» - плохая причина.Не разрабатывайте свое приложение, потому что что-то может произойти.Разработайте приложение на основе текущих реальных требований (гибким способом) и проведите рефакторинг вашего кода, если необходимо внести изменения - это единственный способ быть конкурентоспособным на рынке.Функции продают ваше ПО, а не его открытую архитектуру для каких-либо изменений (хорошо, есть исключения, но в таких случаях открытая архитектура является требованием высшего уровня).
При использовании EF у вас есть несколько вариантов созданияentity:
- Используйте инструмент cutom для генерации объектов Entity.Это подход по умолчанию, который создает файл с кодом для EDMX.Это единственное доступное решение в EFv1 (.NET 3.5 SP1).
- Использование шаблонов T4 для создания объектов Entity, POCO, STE или любых пользовательских типов объектов (вы можете изменить логику генерации).Это часто используется с EFv4.
- Пишите POCO самостоятельно.Это можно использовать с EFv4 и всегда использовать с первым подходом к коду в EF 4.1.
Если вы ожидаете, что технология доступа к данным может измениться в будущем, используйте либо второй, либо третий подход с POCO,В случае шаблонов T4 вы можете просто скопировать созданные POCO или изменить файл проекта, чтобы не потерять их после удаления файла EDMX.
Если вы не уверены, подходит ли вам второй или третий подход, проверьте мои ответына эти вопросы:
Поскольку я как-то согласен с ответом @ Patko, вам также следует проверить блог Айенде .Он написал несколько постов об использовании репозитория и архитектуре приложений.Он пишет о NHibernate, но подобные решения могут быть сделаны с EF.Единственное отличие состоит в том, что NHibernate предлагает лучшую абстракцию, поэтому код, использующий напрямую NHibernate, лучше тестируется.