Мы только начинаем с NHibernate и рассматриваем NH Cookbook 3.0, в котором рассказывается об использовании EventListener для отметки объекта, который указывал, кто создал объект и когда, затем, кто изменил объект и когда.Сейчас мы рассмотрим реализацию прослушивателя событий отслеживания аудита (создание истории изменений значений свойств).Рекомендуется использовать два (или более) прослушивателя событий, каждый из которых обрабатывает одну задачу, или один обработчик событий, обрабатывающий несколько задач.
Таким образом, код прослушивателя одного события будет выглядеть примерно так:
public class EventListener : IPreInsertEventListener, IPreUpdateEventListener
{
...
...
public bool OnPreUpdate(PreUpdateEvent e)
{
_stamper.Update(e.Entity as IStampedEntity, e.OldState, e.State, e.Persister);
_auditTracker.Update(e.Entity as IAuditTrackedEntity, e.OldState, e.State, e.Persister);
return false;
}
}
Хотя модель слушателя двух событий будет выглядеть примерно так:
public class StamperEventListener : IPreInsertEventListener, IPreUpdateEventListener
{
...
...
public bool OnPreUpdate(PreUpdateEvent e)
{
_stamper.Update(e.Entity as IStampedEntity, e.OldState, e.State, e.Persister);
return false;
}
}
public class AuditHistoryEventListener : IPreUpdateEventListener
{
...
...
public bool OnPreUpdate(PreUpdateEvent e)
{
_auditTracker.Update(e.Entity as IAuditTrackedEntity, e.OldState, e.State, e.Persister);
return false;
}
}
Что считается наилучшей практикой, и есть ли какие-либо недостатки в производительности у обоих?Позднее (два отдельных прослушивателя событий) может показаться наилучшей реализацией как для уточнения, так и для сопровождения, но просто не уверен, что это вызовет у нас проблемы позже.