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

Рассматривая все возможности создания / обновления столбцов в NHibernate, я в основном ( вопрос Stackru, Ayende Rahien) вижу решения со слушателями.

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

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

1 ответ

Решение

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

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

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

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

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

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

Другие вопросы по тегам