2010-12-02 17 views
0

Nous commençons tout juste avec NHibernate et avons regardé le NH Cookbook 3.0 qui met en évidence en utilisant un EventListener pour estamper un objet avec qui a créé un objet et quand, qui a changé un objet et quand. Nous cherchons maintenant à implémenter un écouteur d'événement de suivi d'audit (en créant un historique des changements de valeur de propriété). Est-il considéré comme la meilleure pratique d'avoir deux (ou plus) écouteurs d'événements gérant chacun une tâche, ou un seul écouteur d'événements gérant plusieurs tâches.Est-ce une bonne idée d'avoir plusieurs EventListeners NHibernate?

Ainsi, le code d'écouteur d'événement unique ressemblerait à quelque chose comme:

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; 
    } 
} 

Alors que les deux cas modèle d'écouteur serait quelque chose comme:

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; 
    } 
} 

Ce qui est considéré comme la meilleure pratique et quels sont les performances inconvénients à l'un ou l'autre? Le plus tard (deux auditeurs d'événements distincts) semblerait être la meilleure implémentation à la fois pour la clarification et la maintenance, mais nous ne savons pas si cela va nous causer des problèmes plus tard.

+0

Tout comme une mise à jour rapide, ainsi que le Stamper recommandé dans le livre de recettes NH 3.0, nous avons ajouté un suivi d'audit complet à l'aide du modèle référencé dans cet article de blog: http://darrell.mozingo.net/2009/08/31/auditing-with-nhibernate-listeners/. D'où la raison pour les deux auditeurs d'événements. –

Répondre

2

Je maintiendrais la mise en œuvre séparée même pour des raisons de maintenabilité - J'ai utilisé cette approche dans quelques derniers projets sans aucun problème .. Qui sait peut-être à un moment donné dans le futur, vous aurez envie de fournir un comportement spécifique dans l'un des écouteurs - dans ce cas, vous devez simplement rediriger votre configuration vers le nouvel écouteur/l'implémentation sans affecter le code existant. Juste mes 2 cents.

+0

Merci, soutient ma réflexion aussi. –

0

Dans la plupart des cas, il ne devrait pas y avoir d'impact perceptible sur les performances. Je serais donc favorable à un écouteur d'événements distinct pour chaque problème.

Cela aiderait à maintenabilité, testabilité, réutilisation, etc.