Ответ будет нет , если вам не нужно иметь возможность переключать ORM или иметь возможность тестировать любой класс, имеющий зависимость от вашей ORM / базы данных.
Если вы хотитечтобы иметь возможность переключать ORM или иметь возможность легко тестировать ваши классы, которые используют уровень базы данных: Да, вам нужен репозиторий (со спецификацией интерфейса).
Вы также можете переключиться на репозиторий памяти (что я делаюв моих модульных тестах), XML-файл или что-то еще, если вы используете шаблон репозитория.
Обновление
Проблема с большинством реализаций шаблона репозитория, которую вы можете найти с помощью Googling,что они не очень хорошо работают в производстве.У них нет опций для ограничения результата (разбивки на страницы) и упорядочивания результата, что довольно удивительно.
Шаблон репозитория становится великолепным, когда он комбинируется с реализацией UnitOfWork и имеет поддержку шаблона спецификации.
Если вы обнаружите, что все это есть, дайте мне знать :) (У меня есть своя собственная, за исключением хорошо работающей части спецификации)
Обновление 2
Репозиторий - это гораздо больше, чем просто абстрактный доступ к базе данных, как это может сделать ORM.Обычная реализация репозитория должна обрабатывать все статистические объекты (например, Order
и OrderLine
).Но обрабатывая их в одном и том же классе репозитория, вы всегда можете быть уверены, что они построены правильно.
Но, эй, вы говорите: это сделано для меня автоматически ORM.Ну да и нет.Если вы создаете сайт, вы, скорее всего, захотите изменить только одну строку заказа.Получаете ли вы полный заказ, перебираете его в цикле, чтобы найти заказ, а затем добавляете его в представление?
Тем самым вы вводите логику в свой контроллер, который там не принадлежит.Как вы делаете это, когда веб-сервис хочет то же самое?Дублировать ваш код?
Используя ORM, довольно просто получить любую сущность из любого места myOrm.Fetch<User>(user => user.Id == 1)
, изменить ее и затем сохранить.Это может быть очень удобно, но также добавляет запахи кода, поскольку вы дублируете код и не можете контролировать, как создаются объекты, если они получили действительное состояние или правильные ассоциации.что вы можете захотеть иметь возможность подписаться на такие события, как «Создано», «Обновлено» и «Удалено» централизованно.Это легко, если у вас есть репозиторий.
Для меня ORM предоставляет способ сопоставления классов с таблицами и ничего более.Мне все еще нравится оборачивать их в репозитории, чтобы иметь возможность контролировать их и получать единую точку модификации.