Зачем нужен шаблон репозитория в NHibernate?


13

Я читаю официальное Ваше первое приложение на основе NHibernate .

Хотя учебник хорош и легок для понимания, мне интересно, почему используется шаблон Repository.

В различных Add, Update, Removeметоды в ProductRepositoryреализации, код почти идентичен - все они используют транзакции, а разница в «мясо» , то есть вызов session.SaveINT Addметод, session.Deleteв removeметоде. ( На странице отсутствуют привязки HTML, но вы можете выполнить поиск на соответствующем коде, например public void Remove,public void Add )

Этот код просто "чувствует себя неправильно".

Почему автор использует шаблон Repository - это просто для демонстрации использования NHibernate или это требуется или по какой-то другой причине?

Ps. Мой опыт работы в Ruby on Rails с использованием ActiveRecord, поэтому я пытаюсь понять, как работает / используется NHibernate.


1
Если вы предпочитаете паттерн ACtive Record, тогда вы можете использовать активную запись Castle,
Бен Робинсон

3
Это критический вопрос. Существует спор о том, использовать его или нет. Айенде написал свои аргументы, чтобы не использовать его в репозитории нового синглтона

Ответы:


10

Шаблон хранилища не требуется. Что касается всех остальных шаблонов, то это «архитектурное» решение, которое вы должны принять в соответствии с потребностями вашего бизнеса. В общем случае, шаблон репозитория используется для реализации «Entity Persistance Ingorance», что означает, что ваши сущности ничего не знают о том, как сохранить себя на вашем устройстве хранения (База данных, XML, TextFile и т. Д.). Если, например, у вас есть адрес объекта, он не будет содержать логику персистентности (вы нигде не найдете что-то вроде address.Save или address.Update), но вы передадите свой объект в метод репозитория, который отвечает за сохранение изменения


Я думаю, что да и нет. Сам сеанс NHibernate является своего рода общим хранилищем. Таким образом, добавление дополнительного репозитория, как правило, не более, чем добавление фасада к объекту сеанса.

на самом деле мой ответ начинается так: «Шаблон хранилища не требуется ...». Это может быть просто архитектурное решение, в соответствии с бизнес-потребностями, вот и все

Я полностью согласен с этим. Но я упустил момент, что сама сессия является хранилищем, вот и все.

9

Преимущество использования шаблона репозитория заключается в том, что он позволяет имитировать уровень доступа к данным, чтобы вы могли тестировать код бизнес-уровня без вызова кода DAL. Есть и другие большие преимущества, но мне кажется, что это очень важно.


2
+1 шаблон ActiveRecord делает очень трудным изолировать DAL для имитации, обычно заканчивая модульными тестами, требующими собственной базы данных (в этом случае модульный тест становится интеграционным тестом).
MattDavey
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.