Frage

Ich bin auf der Suche nach Ideen, wie Audit-Trails für meine Objekte in C #, für das aktuelle Projekt zu implementieren, im Grunde muß ich:

1.Store die alten Werte und neue Werte eines bestimmten Objekts. 2.Record Schaffung neuer Objekte. 3.Deletion des alten Objekts.

Gibt es eine generische Art und Weise, dies zu tun, wie mit C # Generics, so dass ich zu Objekt nicht schreiben Code für Veranstaltungen der Basis wie bei der Erstellung, beim Löschen usw. (ORM-Objekten) .Die Sache ist, dass wenn es einen Weg war Prüfpfad zu injizieren, wenn man eine .Anybody verwendet haben keine Erfahrungen oder alle Methoden, die sie follow.Any Weg, dies in einem Aspect-orientierten (AOP) mannner zu tun.

Bitte teilen Sie Ihre Ideen etc.

War es hilfreich?

Lösung

Die Frage ist ziemlich ähnlich zu Wie setzen Sie Audit-Trail für Ihre Objekte (Programmierung) ?

Wir haben eine ähnliche Lösung implementiert, unter Verwendung von AOP (aspectj Implementierung). diese besondere Punkte verwenden, können erfasst und spezifische Operationen durchgeführt werden können, werden.

Diese gesteckt werden kann und ausgesteckt, wenn wir wollen.

Aber unsere Implementierung war in J2EE ..

Wenn Sie es wirklich in der App Schicht tun mögen, würde ich dies vorschlagen.

Hoffe, es hilft ..

Andere Tipps

Sie könnten etwas ähnlich zu INotifyPropertyChanged mit einem kleinen Unterschied implementieren. Ich habe die meisten INotifyPropertyChanged extrahiert und verändert sie generisch und speichern neue und alte Werte. Sie können dann eine Art von einer Management-Klasse, die auf diesem und onSaving hören und onDeleting Sie mit den Veränderungen umgehen können.

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

Zusätzlich zu einigen der Dinge in der oben genannten Thread erwähnt die Command-Muster rel="nofollow sein könnte Hilfe, wenn Sie alle Zustandsänderungen auf dem Objekt in einem Befehl wickeln dann kann der Befehl für die Führung der Audit-Trail verantwortlich sein, während sich das Objekt über Revision selbst kümmern sich nicht. Natürlich ist es Aufwand zu erstellen und Entsorgung Befehle hinzugefügt.

Sie können Befehle umschlingen jede bestehende Objektstruktur, die Sie gerade Ihre Aktionen auf den Befehl Schicht delegieren im Gegensatz sie auf die Objekte direkt zu tun.

Haben Sie darüber nachgedacht, eine einfache Mitteilung Muster verwendet? Sie könnten Ihre Service-Layer-Ereignisse auslösen, wie NewObject haben, ChangedObject, DeletedObject, die wird durch eine generische Dienstschicht angehört werden, die das Objekt dann nehmen und die Ergebnisse speichern.

Wenn Sie den Zustand des Objekts sparen, können Sie die XML-Serialisierung nutzen konnten.

Ein weiterer Ansatz zur Verfügung, wenn die SQL Server 2008 verwenden, können Sie die neuen Auditing-Funktionen implementieren, die Sie Änderungen an Datenbankaufzeichnungen überprüfen lassen Sie auch verfolgen können (glaube ich), wenn die Daten gelesen werden.

Pretty alte Frage, aber für diejenigen, C # Objekte zu prüfen, würde ich die Audit.NET Bibliothek.

Es hat Erweiterungen für unterschiedliche Speichersysteme einzuloggen (SQL Azure, Mongo) und für die Prüfung verschiedenen Systeme (WCF, EF, MVC).

Hinweis: Ich bin der Eigentümer

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top