Является ли единица измерения более эффективной, если я не забочусь о транзакциях и т.д.?
-
06-09-2019 - |
Вопрос
Если у меня есть 10 вызовов базы данных на моей веб-странице, и ни один из них не требует каких-либо транзакций и т.д.Они просто получают данные из базы данных (читают), должен ли я по-прежнему использовать класс unit of work?
Это потому, что создание нового сеанса для каждого вызова базы данных обходится слишком дорого?
Решение
С NHibernate создание фабрики сеансов обходится очень дорого (поэтому вам захочется кэшировать фабрику сеансов после ее создания, вероятно, на HttpApplication
) но создание сеанса обходится очень дешево.Другими словами, если это делает ваш код более чистым, создание нескольких сеансов не обязательно плохо.Я думаю, что документация NH говорит об этом лучше всего:
ISessionFactory - это дорогостоящий в создании потокобезопасный объект предназначенный для совместного использования всеми потоками приложения.ISession - это недорогой, не связанный с потоками объект , который следует использовать один раз, для одного бизнес-процесс, а затем отброшен.
Таким образом, использование шаблона UoW, вероятно, не Еще эффективно из-за дополнительных накладных расходов, но это хорошая практика, и накладные расходы, вероятно, вам не повредят.Преждевременная оптимизация и все такое.
Другие советы
Да, вы должны использовать транзакцию.Из блога Айенде:
"NHibernate предполагает, что весь доступ к базе данных осуществляется в рамках транзакции, и настоятельно не рекомендует любое использование сеанса без транзакции".
Для получения более подробной информации вот ссылка на его публикацию в блоге: