2008-11-30 18 views
7

Je cherche des idées sur la façon de mettre en œuvre des pistes d'audit pour mes objets en C#, pour le projet courant, fondamentalement:Implémentation du journal d'audit pour les objets en C#?

1.Store les anciennes valeurs et les nouvelles valeurs d'un objet donné. 2.Record création de nouveaux objets. 3.Délétion de l'ancien objet.

Existe-t-il un moyen générique de faire cela, comme utiliser C# Generics, de sorte que je n'ai pas besoin d'écrire du code pour les événements de l'objet de base? que s'il y avait un moyen d'injecter la piste de vérification si quelqu'un utilise un. Tout le monde a des expériences ou des méthodes qu'ils suivent. Une façon de le faire dans un manier orienté Aspect (AOP).

S'il vous plaît partager vos idées, etc.

Répondre

1

La question est assez similaire à How do you implement audit trail for your objects (Programming)?

Nous avons mis en place une solution similaire, en utilisant AOP (de mise en œuvre AspectJ). L'utilisation de ces points particuliers peut être capturée et des opérations spécifiques peuvent être effectuées.

Ceci peut être branché et branché quand on veut.

Cependant, notre implémentation était en J2EE ..

Si vous voulez vraiment faire dans la couche d'application, je suggère cela.

Hope it helps ..

+0

j'ai demandé au Q que pourquoi son hee simlar ... Eh bien, j'ai château comme mon aop, mais comment puis-je Interspect etc ou est-il un modèle que je dois suivre ou pourriez-vous le mettre en mots comment vous le faites? J'espère que ce n'est pas beaucoup. – abmv

+0

Nous avions utilisé Spring IOC et Spring AOP. Ils fournissent à la fois statique et dynamique aop. Il vous faudrait écrire vos aspects en tant que haricots, puis les attacher aux objets que vous souhaitez auditer. Je suppose que l'équivalent .net s'appelle NSpring. – Satya

1

En plus de certaines des choses mentionnées dans le fil au-dessus du Command Pattern pourrait être utile, si vous enveloppez tous les changements d'état sur votre objet dans une commande alors la commande peut être responsable de garder la piste d'audit, tandis que l'objet n'a pas à s'inquiéter de s'auditer. Bien sûr, il y a des frais supplémentaires pour créer et éliminer des commandes.

Vous pouvez placer des commandes autour de n'importe quelle structure d'objet existante, il vous suffit de déléguer vos actions à la couche de commandes au lieu de les faire directement sur les objets.

1

Avez-vous envisagé d'utiliser un modèle de notification simple? Votre couche de service peut déclencher des événements tels que NewObject, ChangedObject, DeletedObject qui seront écoutés par une couche de service générique qui peut alors prendre l'objet et enregistrer les résultats.

Si vous souhaitez enregistrer l'état de l'objet, vous pouvez tirer parti de la sérialisation Xml. Une autre approche est disponible si vous utilisez SQL Server 2008 et que vous pouvez implémenter les nouvelles fonctionnalités d'audit qui vous permettront d'auditer les modifications apportées aux enregistrements de base de données que vous pouvez même suivre (je pense) lorsque les données sont lues.

3

Vous pouvez implémenter quelque chose de similaire à INotifyPropertyChanged avec une légère différence. J'ai extrait la plupart des INotifyPropertyChanged et l'ai changé pour être générique et stocker les nouvelles et anciennes valeurs. Vous pouvez alors avoir une sorte de classe de gestion qui peut écouter ceci et onSaving et onDeleting vous pouvez gérer les changements.

public interface INotifyProperyChanged<T> 
{ 
    event PropertyChangedEventHandler<T> PropertyChanged; 
} 

    public delegate void PropertyChangedEventHandler<T>(object sender, 
PropertyChangedEventArgs<T> e); 

public class PropertyChangedEventArgs<T> : EventArgs 
{ 
    private readonly string propertyName; 

    public PropertyChangedEventArgs(string propertyName) 
    { 
     this.propertyName = propertyName 
    } 

    public virtual string PropertyName { get { return propertyName; } } 

    public T OldValue { get; set; } 
    public T NewValue { get; set; } 
} 
0

question assez vieux, mais pour ceux qui veulent vérifier les objets C#, je recommanderais la bibliothèque Audit.NET.

Il dispose d'extensions pour se connecter à différents systèmes de stockage (SQL, Azure, Mongo) et pour l'audit de différents systèmes (WCF, EF, MVC).

Note: Je suis le propriétaire