Domanda

La nostra attuale soluzione aziendale è un'applicazione MVC ASP.NET guidata da Entity Framework. Ci sono un paio di collegamenti su come agganciarsi agli eventi di modifica per il controllo. Non mi interessa davvero questo.

Sono interessato all'architettura di controllo a livello aziendale. Quelli di voi con le ferite da battaglia a livello aziendale, quali sono state le vostre soluzioni di auditing? Serializzi gli oggetti nei database in un framework. Stai impostando i trigger del database per le tabelle di controllo? Usi un database separato tutti insieme in modo che la crescita del controllo non influisca sul database dell'app? Sono interessato alle soluzioni provate e vere qui. So che ci sono opzioni nella nostra scelta tecnologica (EF), ma sono interessato prima alla fondazione.

I collegamenti sarebbero molto apprezzati.

È stato utile?

Soluzione

Ho visto diverse soluzioni, ma la mia preferita era la semplicità stessa:

  • Crea tabelle di controllo che rispecchiano ciascuna tabella di origine, aggiungendo alcune colonne aggiuntive per tenere traccia della data e del tipo di modifica (inserisci, aggiorna o elimina se lo supporti) e l'utente che apporta la modifica. Rimuovi tutti i vincoli e gli indici (a meno che non ti aspetti di fare molte ricerche).

  • All'interno della logica di aggiornamento della tabella (abbiamo usato le procedure, ma non c'è motivo per cui non si potesse fare con un OR / M o altro livello di persistenza, dati gli hook appropriati), scrivere sia nella tabella di origine che la tabella di controllo.

Ciò ha numerosi vantaggi, ma il più grande (secondo me) non è preoccuparsi o scrivere tutto il codice per gestire l'integrità transazionale delle operazioni di scrittura accoppiate nel client.

Altri suggerimenti

Non ho alcun collegamento, ma nel sistema ho la gioia di mantenere qui il lavoro di giorno. Abbiamo una singola tabella di controllo, che sostanzialmente memorizza le seguenti informazioni.

TableName, PrimaryKeyValue, ModifiedColumn, OldValue, NewValue, ChangeUser, Change Date

Ora, questo funziona alla grande per la velocità di controllo, nel nostro codice abbiamo un'interfaccia comune per l'implementazione automatica della registrazione di controllo, ma da una "recensione" punto di vista, non è il "più veloce" modo per recuperare le informazioni. (Concesso che in realtà non abbiamo fatto nulla per esaminare il registro di controllo ...)

Di recente abbiamo dovuto risolvere lo stesso problema nella nostra azienda. Ci è stato richiesto di tornare alle versioni precedenti.

Abbiamo finito per verificare le entità aziendali anziché le tabelle in sql. Fondamentalmente serializziamo i record nel DB e teniamo traccia delle modifiche apportate da una versione alla successiva. Questo approccio ci consente di recuperare le versioni precedenti nelle entità aziendali e quindi di tornare indietro chiamando le stesse operazioni di salvataggio. Questa funzionalità per tornare indietro sarà spostata sulla responsabilità delle applicazioni perché deve essere risolta qui altrimenti il ??nostro servizio potrebbe dover conoscere troppi dettagli sulle applicazioni partecipanti. Vengono fornite le operazioni Serivce per recuperare i record per versioni, per date, visualizzare la cronologia e, naturalmente, per controllare le modifiche. È un approccio opt-in per diversi gruppi di applicazioni e diverse entità all'interno (non tutto deve essere verificato nel DB, quindi perché farlo).

Costruiamo quindi un sito Web leggero che parla al servizio e può visualizzare tutte le versioni. Abbiamo creato un meccanismo per mostrare le aggiunte / aggiornamenti / eliminazioni da confrontare tra le versioni (rappresentazione dell'interfaccia utente davvero interessante) che consente agli utenti di vedere chi ha cambiato cosa e quando. Il servizio può inviare un collegamento all'URL per visualizzare le versioni di un'entità. Ciò consente alle nostre webaps + app winform / wpf di avviare un browser in modo che gli utenti possano vedere le modifiche.

Forse posso impacchettarlo e fornire se qualcuno è interessato ....

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