NHibernate: разница между перехватчиком и слушателем
Рассматривая все возможности создания / обновления столбцов в NHibernate, я в основном ( вопрос Stackru, Ayende Rahien) вижу решения со слушателями.
Программист, который программировал это в моей компании, использовал Interceptor для достижения того же.
Есть ли разница между этими двумя решениями? (Является ли один из них устаревшим, является ли один из них предпочтительным и каковы его преимущества и / или недостатки)
1 ответ
Перехватчики по-старому, слушатели событий более новые и серверные с той же целью. Поэтому в новом проекте рекомендуется слушать события. Вы подключаетесь к новой системе событий NHibernate.
Редактировать: как Рашак упоминает в своем комментарии, есть некоторые операции, которые могут быть сделаны только с помощью перехватчика.
Согласно документации, в нем говорится, что: "Если вам нужно реагировать на определенные события на уровне сохранения, вы также можете использовать архитектуру событий Hibernate. Систему событий можно использовать в дополнение или в качестве замены для перехватчиков".
У обоих есть несколько отличий:
Слушатели легко настраиваются, например, в соответствии с документом hibernate: "Наличие типа, дополнительно определенного во время регистрации, упрощает включение или выключение пользовательских прослушивателей во время настройки"
Перехватчики могут иметь область видимости сеанса или фабрики сеанса с помощью программного, а также декларативного подхода. С другой стороны, декларативно зарегистрированные слушатели не могут совместно использовать экземпляры. Если одно и то же имя класса используется в нескольких элементах, каждая ссылка приведет к созданию отдельного экземпляра этого класса. Если вам нужно совместно использовать экземпляры слушателя между типами слушателя, вы должны использовать подход программной регистрации.