2009-07-04 13 views
2

dans l'application actuelle im travail sur le client a demandé que nous allons enregistrer l'historique de chaque action qui s'est produite dans le système et fournir la possibilité de revenir à l'état précédent de l'information.gestion de l'historique/changement suivi dans la DB et les conséquences sur le BL

par exemple: permet de dire que mon application a besoin pour gérer un stockage chambre et chaque utilisateur peut ajouter/modifier/supprimer/lecture (tous CRUD) l'inventaire

si l'utilisateur a ajouté P1 produit avec l'action A1 et mis à jour ses informations afin qu'il devienne P2 avec l'action A2 et plus tard sur P3, P4 et ainsi de suite. dans l'application, l'utilisateur aura un écran qui montrera toute l'évolution du produit et ascreen qui montre toutes les actions qui ont été faites par les utilisateurs. l'utilisateur pourrait sélectionner une certaine action et "l'annuler". J'ai pensé que je vais stocker une sorte de tableau Actions avec toutes les informations dont j'ai besoin sur l'action et quand j'ai besoin d'annuler et d'action, je viens de rétablir les changements dans le code. Mon problème est le suivant: si le produit n'est pas stocké dans une table mais divisé en quelques tables (en raison de l'optimisation/compréhensibilité, etc.), j'ai besoin de savoir où exactement étaient les changements.

devrais-je garder une indication dans le tableau Actions de quelles tables ont été influencées et le refléter au BL ????

me semble qu'il doit y avoir une meilleure solution

Répondre

0

en utilisant peut-être une action plus particulière pour que l'application sache exactement ce que todo

Do not mettre logique sur la DB

1

Je l'ai fait somthing comme cela une fois et pour être capable de revenir sur les changements, vous devez garder une trace sur le terrain qui changent.

Peu importe où ces champs sont placés tant que vous savez où ce champ a été placé. Vous pouvez donc créer dans votre BL une sorte de classe d'assistance qui "sait" où chaque champ est placé et le mappe dans la colonne "table-> droite" dans DB. Cela réduira les chaînes et autres éléments de la base de données dans votre BL.

Il suffit de mettre cette classe d'aide dans DAL.

Lorsque vous avez besoin de voir les changements (et/ou revenir les) Envoyer la question à DAL ...

Par ailleurs dans MS-SQL 2008, il est intégré dans le suivi des modifications, vous pouvez donc l'utiliser pour regarder pour les changements. - Change Tracking