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

Преимущества использования Единицы работы и шаблонов репозитория с платформой Entity Framework

Согласно MSDN, DbContext определяется как:

Представляет комбинацию шаблонов Unit-Of-Work и Repository и позволяет вам запрашивать базу данных и группировать изменения, которые затем будет записана обратно в хранилище в виде единицы.

Так как DbContext реализует шаблоны Unit of Work и Repository, то почему этот учебник ASP.NET и другие ресурсы, которые у меня есть найденные в Интернете демонстрируют использование DbContext с пользовательскими реализациями шаблонов Единицы работы и хранилища? Разве это не избыточно?

Если нет, то в чем преимущество создания пользовательских реализаций слоев Work and Repository при использовании DbContext? (Я вижу, как это может иметь смысл в рамках тестового проекта.)

4b9b3361

Ответ 1

Да, DbContext представляет собой Единицу работы, а DbSet представляет репозиторий, но некоторые люди создадут над ними слой абстракции. Вот несколько причин, по которым люди могут это сделать:

  • Возможно, они не хотят, чтобы их проект был тесно связан с Entity Framework и его архитектурой. Таким образом, они скрывают Entity Framework за этими абстракциями, поэтому они могут заменить Entity Framework для любого другого ORM без каких-либо изменений интерфейса интерфейса доступа к данным.
  • Они используют репозитории, чтобы дать понять, какие операции разрешены для определенных объектов. (Например, CustomerRepository может позволить добавлять и обновлять клиентов, но не удалять их). С другой стороны, он позволяет разработчику клиента легко распознавать доступные операции для определенных объектов. Другими словами, они создают репозитории с соглашениями об именах и интерфейсами, которые совместимы с языком домена.
  • Перемещение операций, связанных с базой данных, в репозитории позволяет перехватывать эти операции и выполнять ведение журнала, настройку производительности или любую другую операцию, которую вы хотите.
  • Некоторые делают это, чтобы упростить тестирование. Скажем, у меня есть интерфейс ICustomerRepository с тремя методами. Тогда я могу легко высмеять это, вместо того, чтобы издеваться над IDbSet<Customer> со слишком многими методами.
  • Наконец, есть много тех, кто не создает абстракцию над DbContext и DbSet. Они просто используют их напрямую, и это совершенно верно для этого.

Ответ 2

Я знаю это слишком поздно

Для Unit-Of-Work: Когда вы извлекаете данные из базы данных и из нее, важно следить за тем, что вы изменили. Аналогично, вам нужно вставить новые объекты, которые вы создавать и удалять любые объекты, которые вы удаляете.

Вы можете изменить базу данных с каждым изменением на свою объектную модель, но это может привести к множеству очень маленьких запросов к базе данных.

Единица работы отслеживает все, что вы делаете во время бизнес-транзакции, которая может повлиять на базу данных.

Для шаблона репозитория: Это изолирует бизнес-домен от базы данных.

Прочитайте книгу (PEAA)