2011-04-13 2 views
1

Je développe une application C# qui a les deux conditions suivantes:Undo/Redo + enregistrer

  1. l'utilisateur doit être en mesure d'annuler/rétablir des commandes telles que l'insertion, la modification et la suppression de comptes, les transactions, etc.
  2. Ces commandes ne doivent être conservées dans la base de données SQL CE que lorsque l'utilisateur clique sur Enregistrer.

Existe-t-il des meilleures pratiques pour cela? J'ai lu que la mise en œuvre du modèle de commande est utile pour l'exigence annuler/rétablir. Le problème pour moi vient de persister les changements à la base de données. J'utilise des entités commerciales et non des DataSets, et je ne peux pas utiliser Linq pour SQL ou Entity Framework, donc je ne suis pas sûr de savoir comment suivre les modifications apportées à ces entités pour les conserver dans la base de données lorsque l'utilisateur clique sur Enregistrer.

Ma question est:

est-il préférable de mettre en œuvre l'unité de modèle de travail pour suivre les changements ou est-il une meilleure façon? Je ne suis pas sûr de savoir comment cela se combinera avec le modèle de commande, par ex. est l'unité de travail passée à la commande qui marque une entité comme dirty/new/deleted, et que se passe-t-il lorsque la méthode undo d'une commande est exécutée? L'entité est-elle marquée comme sale/nouvelle/supprimée ou peut-elle être supprimée de l'unité de travail en quelque sorte?

+0

http://stackoverflow.com/a/29949644/2961878 Ce n'est pas la réponse à votre question, mais je pense qu'AZURITE peut vous aider à trouver des idées. – Alisa

Répondre

2

http://en.wikipedia.org/wiki/Memento_pattern

commande va changer vos entités commerciales, ils stockeront dans l'état actuel des objets d'état, et la liste des entrées d'état précédent, sauf économisera état actuel, la restauration restaure l'état précédent.

0

Utilisez le modèle de commande avec les modifications suivantes (dans le modèle de commande standard, vous avez une méthode d'appel.Cette spécialisation utilise un répartiteur pour appeler la commande).

Créez une classe Dispatcher à laquelle toutes les commandes sont appelées. Créez un événement dans cette classe appelée pour toutes les commandes. Créez une classe qui écoute sur cet événement. Laissez cette classe enregistrer toutes les modifications apportées à votre base de données.

Questions connexes