2008-09-29 10 views
9

J'ai besoin de mettre en œuvre une piste de vérification pour Ajouter/Modifier/Supprimer sur mes objets, j'utilise un ORM (XPO) pour définir mes objets etc. Je mis en place un objet piste d'audit qui est déclenché surComment implémentez-vous la piste d'audit pour vos objets (Programmation)?

  1. OnSaving
  2. OnDeleting

de l'objet de base, et j'enregistrer les modifications dans l'audit-AuditTrail Table (mât-Det), des changements sur le terrain. etc. en utilisant certains services de méthode appelés.

Comment implémentez-vous la piste d'audit dans votre code OOP? S'il vous plaît partagez vos idées? Des motifs, etc. Bonnes pratiques etc? Une autre chose est que comment désactiver l'audit lors du test unitaire, puisque je n'ai pas besoin de les auditer mais puisque l'objet de base a le code.

modifications à l'objet (modifier/ajouter/del) et quels changements domaine doivent être vérifiés

Répondre

0

Je sais que cela ne répond pas à votre question, mais pour l'enregistrement, je préfère gérer ce type de logique d'audit dans la base de données.

7

Les déclencheurs de base de données sont la manière préférée d'aller ici, si vous le pouvez.

Cependant, récemment j'ai dû faire cela dans le code côté client et j'ai fini par écrire une classe qui créait une copie profonde (valeur) de l'objet quand il était ouvert pour l'édition, comparé les deux objets au moment du en utilisant ToString() uniquement) et écrit les modifications apportées à une table d'audit. Edit: J'avais un attribut [Audit] sur chaque propriété que je voulais considérer auditable et utilisé la réflexion pour les trouver, rendant la méthode non spécifique aux objets audités.

+2

J'ai répondu à cette question, mais une chose à surveiller lors de l'utilisation de déclencheurs de base de données est les parenthèses de transaction. Vous souhaitez parfois auditer un événement même lorsqu'une erreur se produit et que la transaction est annulée. – Andrew

1

Je viens plus du côté SW que du côté DB, si vous créez un ensemble de DAO (objets d'accès aux données) que vous utilisez pour votre interaction avec la base de données. J'insérerais ensuite la fonctionnalité d'audit dans les fonctions respectives des DAO qui doivent être suivis.

La solution de déclenchement de la base de données est également possible, cela dépend où vous voulez mettre votre fonctionnalité, dans les outils DB ou dans le code

Il y a beaucoup de ORM (Object Relational Mapping) là-bas qui créent la DAO couche pour vous.

3

Je ne sais pas si elle ira parfaitement avec votre ORM, mais j'ai utilisé la conception de base de données Point-in-Time pour une application ERP et je le recommande vraiment. Vous obtenez automatiquement l'historique et l'audit de cette architecture, ainsi que d'autres avantages.

+0

Je traite avec l'application Multitenant, où nous tous les enregistrements de locataire seront stockés dans une base de données unique avec TenantId. Si j'utilise PTA, je vais finir avec beaucoup de lignes dans la base de données, en particulier pour la mise à jour :( –

1

Nous avons implémenté une solution similaire, en utilisant AOP (implémentation d'aspectJ). L'utilisation de ces points particuliers peut être capturée et des opérations spécifiques peuvent être effectuées.

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

Si vous voulez vraiment le faire dans la couche de l'application, je le suggère.

Hope it helps ..

+0

Avez-vous un échantillon ou un lien? – DanielV

0

Je l'ai fait en veille prolongée (un autre ORM) en utilisant un intercepteur de la session. De cette façon, le code d'audit est séparé de votre code.