2008-09-29 10 views
9

Ho bisogno di implementare un audit trail per aggiungere/modificare/eliminare i miei oggetti, sto usando un ORM (XPO) per definire i miei oggetti ecc ho implementato un oggetto audit trail che viene attivato suCome implementate la traccia di controllo per i vostri oggetti (programmazione)?

  1. OnSaving
  2. OnDeleting

dell'oggetto base, e memorizzare le impostazioni nel Audit-AuditTrail (Mast-DET) tavolo, per variazioni di campo. ecc. usando alcuni servizi di metodo chiamati.

Come implementare la traccia di controllo nel codice OOP? Per favore condividi i tuoi approfondimenti? Qualche modello ecc? Buone pratiche ecc.? Un'altra cosa è come disabilitare l'audit durante l'esecuzione di unit test, dal momento che non ho bisogno di controllarli ma poiché l'oggetto di base ha il codice.

modifiche per oggetto (modificare/aggiungere/DEL) e che campo le modifiche devono essere oggetto di revisione contabile

risposta

0

So che questo non risponde alla tua domanda, ma per la cronaca, io preferisco gestire questo tipo di logica di controllo nel database.

7

I trigger di database sono il modo migliore per andare qui, se possibile.

Tuttavia, di recente ho dovuto farlo nel codice lato client e ho finito per scrivere una classe che creava una copia profonda (valore) dell'oggetto quando è stato aperto per la modifica, ha confrontato i due oggetti al momento del salvataggio (utilizzando solo ToString() e scritto eventuali modifiche a una tabella di controllo.

Modifica: ho avuto un attributo [Audit] su ciascuna proprietà che volevo considerare verificabile e utilizzato il reflection per trovarli, rendendo il metodo non specifico per gli oggetti sottoposti a verifica.

+2

Ho votato questa risposta, ma una cosa da tenere a mente quando si utilizzano i trigger di database sono le parentesi di transazione. A volte si desidera controllare un evento anche quando si verifica un errore e si esegue il rollback della transazione. – Andrew

1

Vengo più dal lato SW che dal lato DB, se si crea un set di DAO (oggetti di accesso ai dati) che si utilizzano per l'interazione con il database. Inserirò quindi le funzionalità di controllo nelle rispettive funzioni nei DAO che devono essere seguite.

La soluzione di database trigger è anche fattibile, dipende da dove vuoi mettere la funzionalità, nel DB o nel codice

Ci sono un sacco di ORM (Object Relational Mapping) strumenti di là fuori che creano la Strato DAO per te.

3

Non so se si adatta perfettamente al tuo ORM, ma ho usato il design del database Point-in-Time per un'applicazione ERP e lo consiglio vivamente. Ottieni automaticamente Cronologia e Verifica da questa architettura, oltre ad altri vantaggi.

+0

Ho a che fare con l'applicazione Multitenant, in cui tutti i record dei tenant verranno archiviati in un unico database con TenantId. Se uso PTA, finirò con un sacco di righe nel database, soprattutto per l'aggiornamento :( –

1

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

Questo può essere inserito e scollegato quando ci piace.

Se si vuole davvero farlo nel livello dell'app, suggerirei questo.

Speranza che aiuta ..

+0

Avete qualche esempio o collegamento? – DanielV

0

Ho fatto questo in Hibernate (un altro ORM) utilizzando un Interceptor per la sessione. In questo modo il codice di controllo è separato dal tuo codice.

Problemi correlati