NHibernate: разница между перехватчиком и слушателем

Рассмотрение всех возможностей создания / обновления столбцов в NHibernate I в основном (Stackoverflow question, Айенде Рахиен) находить решения с помощью слушателей.

Программист, который программировал это в моей компании, использовал перехватчик, чтобы добиться того же.

Есть ли разница между этими двумя решениями? (Является ли один из них устаревшим, является ли один из них предпочтительным и каковы преимущества и / или недостатки)


person bernhardrusch    schedule 15.05.2009    source источник


Ответы (2)


Перехватчики используются по-старому, прослушиватели событий более новые и служат для той же цели. Итак, в новом проекте рекомендуется использовать прослушиватели событий. Вы подключаетесь к новой системе событий NHibernate.

Изменить: как Рашак упоминает в своем комментарии, есть некоторые операции, которые можно выполнить только с помощью перехватчика.

person Stefan Steinegger    schedule 15.05.2009
comment
Это не совсем так. Хотя прослушиватели событий более новые и рекомендуются, есть определенные операции, которые вы не можете выполнять с ними. А именно предоставление вашего способа инсталлировать объекты и фиксировать начало / конец транзакции. - person Rashack; 15.05.2009
comment
Спасибо за подсказку. Я этого не знал. - person Stefan Steinegger; 15.05.2009

Согласно документации, в нем говорится, что: «Если вам нужно реагировать на определенные события на уровне сохранения, вы также можете использовать архитектуру событий Hibernate. Систему событий можно использовать в дополнение или в качестве замены для перехватчиков».

У обоих есть несколько отличий:

  1. Слушатели легко настраиваются, т.е. в соответствии с документом hibernate «Наличие типа, дополнительно определенного во время регистрации, упрощает включение или выключение пользовательских прослушивателей во время настройки»

  2. Перехватчики могут иметь область видимости сеанса или фабрику сеанса с помощью программного, а также декларативного подхода. С другой стороны, Слушатели, зарегистрированные декларативно, не могут совместно использовать экземпляры. Если одно и то же имя класса используется в нескольких элементах, каждая ссылка приведет к созданию отдельного экземпляра этого класса. Если вам нужно совместно использовать экземпляры слушателя между типами слушателя, вы должны использовать подход программной регистрации.

person Satyam    schedule 05.04.2020