Domanda

Sto cercando idee su come implementare audit trail per i miei oggetti in C #, per il progetto attuale, in pratica devo:

1. Memorizza i vecchi valori e i nuovi valori di un determinato oggetto. 2. Registrare la creazione di nuovi oggetti. 3. Eliminazione del vecchio oggetto.

Esiste un modo generico per farlo, come usare C # Generics, in modo che non debba scrivere codice per eventi dell'oggetto base come sulla creazione, sulla cancellazione ecc. (oggetti ORM). se c'era un modo per iniettare audit trail se si utilizza un. Chiunque abbia qualche esperienza o metodo segua. Qualunque modo per farlo in un modo orientato all'aspetto (AOP).

Per favore, condividi le tue idee ecc.

È stato utile?

Soluzione

La domanda è abbastanza simile a Come si implementa la traccia di controllo per i propri oggetti (Programmazione) ?

Abbiamo implementato una soluzione simile, utilizzando AOP (implementazione aspectJ). L'uso di questi punti particolari può essere acquisito e possono essere eseguite operazioni specifiche.

Questo può essere collegato e scollegato quando vogliamo.

Tuttavia, la nostra implementazione era in J2EE ..

Se vuoi davvero farlo nel livello dell'app, lo suggerirei.

Spero che aiuti ...

Altri suggerimenti

Potresti implementare qualcosa di simile a INotifyPropertyChanged con una leggera differenza. Ho estratto la maggior parte di INotifyPropertyChanged e l'ho modificato per essere generico e memorizzare valori vecchi e nuovi. Puoi quindi avere una sorta di classe di gestione in grado di ascoltare questo e onSaving e onDeleting puoi gestire le modifiche.

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

Oltre ad alcune delle cose menzionate nella discussione precedente, Pattern di comando potrebbe essere di aiuto, se si racchiudono tutte le modifiche di stato sull'oggetto in un comando, il comando può essere responsabile del mantenimento della traccia di controllo, mentre l'oggetto non deve preoccuparsi del controllo stesso. Naturalmente c'è un sovraccarico aggiunto per la creazione e l'eliminazione dei comandi.

Puoi avvolgere i comandi attorno a qualsiasi struttura di oggetti esistente, devi semplicemente delegare le tue azioni al livello di comando invece di eseguirle direttamente sugli oggetti.

Hai preso in considerazione l'utilizzo di un semplice modello di notifica? Il tuo livello di servizio potrebbe generare eventi come NewObject, ChangedObject, DeletedObject che verranno ascoltati da un livello di servizio generico che può quindi prendere l'oggetto e salvare i risultati.

Se si desidera salvare lo stato dell'oggetto, è possibile sfruttare la serializzazione Xml.

Un altro approccio è disponibile se si utilizza SQL Server 2008, è possibile implementare le nuove funzionalità di controllo che consentono di controllare le modifiche ai record del database che è anche possibile tenere traccia (credo) quando i dati vengono letti.

Domanda piuttosto vecchia, ma per coloro che desiderano controllare oggetti C #, consiglierei Audit.NET libreria.

Ha estensioni per accedere a diversi sistemi di archiviazione (SQL, Azure, Mongo) e per il controllo di diversi sistemi (WCF, EF, MVC).

Nota: sono il proprietario

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top