Modèle de conception pour Annuler Moteur

Je suis en train d'écrire une modélisation structurelle de l'outil pour un civil enginering application. J'ai un énorme modèle de classe représentant l'ensemble du bâtiment, qui intègrent les collections de nœuds, éléments de ligne, les charges, etc. qui sont aussi des classes personnalisées.

J'ai déjà codé un annuler moteur qui enregistre une copie en profondeur après chaque modification du modèle. Maintenant, j'ai commencé à penser si je pouvais avoir codé différemment. Au lieu de sauver la profondeur de copies, je pourrais peut-être enregistrer une liste de chaque modificateur d'action avec un correspondant inverse modificateur. Pour que je puisse appliquer l'inverse des modificateurs pour le modèle actuel pour annuler, ou les modificateurs de refaire.

Je peux imaginer comment vous réaliser simplement des commandes qui modifient les propriétés de l'objet, etc. Mais comment, sur la complexité des commandes? Comme l'insertion de nouveaux objets de nœud pour le modèle et l'ajout de quelques objets qui conservent des références à la nouvelle nœuds.

Comment peut-on aller sur la mise en œuvre de qui?

  • Si j'ajoute le commentaire "Annuler Algorthim" qui va le faire donc je peux rechercher "Algorithme d'Annulation" et la trouver? C'est ce que j'ai cherché et j'ai trouvé quelque chose de fermé comme un doublon.
  • le foin,j'ai aussi envie de développer undo/redo dans l'application que nous développons.Nous utilisons QT4 cadre et le besoin d'avoir beaucoup de complexes undo/redo actions..je me demandais , avez-vous réussi à l'aide de la Commande-Modèle ?
  • Il a travaillé, mais il n'était pas facile. La partie la plus difficile a été de garder une trace de références. Par exemple, lorsqu'une Image de l'objet est supprimé, ses objets enfants: les Nœuds, les Charges agissant sur celle-ci et beaucoup d'autres attributions d'utilisateur nécessaires pour être gardé pour être réinséré quand annulée. Mais certains de ces objets enfants ont été partagés avec d'autres objets, et annuler/rétablir la logique est devenue très complexe. Si le modèle n'était pas très grande, je voudrais garder le souvenir de l'approche; il est beaucoup plus facile à mettre en œuvre.
  • c'est un plaisir de problème, pensez à la façon dont le code source de repos le faire, comme svn (ils gardent les différences entre les commits).