Универсальный репозиторий против ObjectSet
Кажется, в блогосфере существует общее соглашение о том, что одной из замечательных особенностей Entity Framework 4 является возможность создавать универсальные репозитории поверх универсальных ObjectSets. Примерные реализации универсальных репозиториев в основном являются обертками вокруг ObjectSet, которые просто переводят вызовы методов. Там нет никакой значимой логики происходит. Подумав немного, я пришел к тому, что спросил себя: какие преимущества дает мне общий репозиторий, который сам ObjectSet еще не предоставляет? ObjectSet обладает всеми необходимыми функциями (CRUD). Поскольку он реализует IEnumerable (и даже IQueryable), он предлагает все расширения Linq, которые позволяют очень легко точно указать, какие именно данные вам нужны. Что именно оправдывает обход в некотором IRepository, в отличие от простого использования IObjectSet непосредственно в качестве моего интерфейса для уровня доступа к данным?
Спасибо и всего наилучшего,
Питер.
1 ответ
Причина реализации шаблона репозитория состоит в том, чтобы облегчить имитационные источники данных для автоматического модульного тестирования.
Если в контексте вашей модели реализован интерфейс (скажем, IRepository), а классы бизнес-логики позволяют передавать объект IRepository через конструктор (внедрение зависимостей), модульные тесты могут создавать свои собственные объекты данных IRepository и передавать их в модульные тесты. Это означает, что вы можете выполнить модульное тестирование без поддержки базы данных, что намного проще и надежнее, чем тестирование на внешней базе данных.