Question

Je cherche des idées sur la manière de mettre en œuvre des pistes d'audit pour mes objets en C #. Pour le projet actuel, j'ai essentiellement besoin de:

1.Stockez les anciennes valeurs et les nouvelles valeurs d'un objet donné. 2.Création d'enregistrement de nouveaux objets. 3.Délétion d'un objet ancien.

Existe-t-il un moyen générique de procéder, tel que l’utilisation de C # Generics, afin que je n’aie pas à écrire de code pour les événements de l’objet de base, comme lors de la création, de la suppression, etc. (objets ORM)? s’il existe un moyen d’injecter une trace d’audit si on utilise un .Tout utilisateur a une expérience ou une méthode qu’il suit .Toute façon de le faire avec un pilote AOP (Orienté Aspect).

Partagez vos idées, etc.

Était-ce utile?

La solution

La question est assez similaire à Comment implémenter un suivi d'audit pour vos objets (Programmation) ?

Nous avons implémenté une solution similaire en utilisant AOP (aspectJ implementation). Ce point particulier peut être capturé et des opérations spécifiques exécutées.

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

Cependant, notre implémentation était en J2EE.

Si vous voulez vraiment le faire dans le calque d'application, je suggérerais ceci.

J'espère que ça aide ..

Autres conseils

Vous pouvez implémenter quelque chose de similaire à INotifyPropertyChanged avec une légère différence. J'ai extrait la plupart de INotifyPropertyChanged et l'ai modifié pour qu'il soit générique et qu'il stocke les valeurs anciennes et nouvelles. Vous pouvez alors avoir une sorte de classe de gestion qui peut écouter cela 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; }
}

Outre les éléments mentionnés dans le fil de discussion ci-dessus, le modèle de commande peut être d’aide, si vous enregistrez toutes les modifications d’état de votre objet dans une commande, celle-ci peut alors être tenue responsable du suivi de la trace, alors que l’objet n’a pas à se soucier de l’audit lui-même. Bien sûr, la création et la suppression de commandes sont surchargées.

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

Avez-vous envisagé d’utiliser un modèle de notification simple? Vous pouvez faire en sorte que votre couche de service déclenche des événements tels que NewObject, ChangedObject, DeletedObject, qui seront écoutés par une couche de service générique qui pourra alors prendre l'objet et enregistrer les résultats.

Si vous souhaitez enregistrer l'état de l'objet, vous pouvez utiliser la sérialisation XML.

Une autre approche est disponible si, à l'aide de SQL Server 2008, vous pouvez implémenter les nouvelles fonctionnalités d'audit qui vous permettent 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.

C'est une vieille question, mais pour ceux qui souhaitent auditer des objets C #, je recommanderais Audit.NET bibliothèque.

Il possède des extensions pour se connecter à différents systèmes de stockage (SQL, Azure, Mongo) et pour auditer différents systèmes (WCF, EF, MVC).

Remarque: je suis le propriétaire

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top