Ich versuche, eine Rückgängig / Wiederherstellen-Funktion in meine Anwendung zu implementieren, indem ich das Befehlsmuster verwende. Ich stehe vor einem Problem.
Stellen Sie sich zur Veranschaulichung vor, Sie können mit meiner Anwendung 2D-Profile erstellen (so viele Sie möchten).
Aus diesen 2D-Profilen können Sie dann ein 3D-Teil mit verschiedenen Attributen (Name, Farbe, Maßstab usw.) erstellen.
%Vor%Wenn ein Profil gelöscht wird, werden auch alle 3D-Teile, die auf diesem Profil erstellt wurden, automatisch gelöscht (wenn ein Profil gelöscht wird, wird ein 3D-Bauteil-Manager benachrichtigt und löscht die veralteten 3D-Teile. Ansichten werden ebenfalls benachrichtigt um die GUI zu aktualisieren).
Hier habe ich ein Problem: Ich schreibe den Undo / Redo-Befehl zum Löschen eines 2D-Profils, das ungefähr so aussieht (Pseudocode):
%Vor%Wie Sie im obigen Code sehen können, werden beim Entfernen des 2D-Profils automatisch alle 3D-Teile gelöscht, die auf dem entfernten Profil basieren.
Wenn Sie das Rückgängigmachen jedoch rückgängig machen, reicht das erneute Hinzufügen des 2D-Profils zur Liste nicht aus: Die 3D-Teile sind verloren.
Was soll ich tun? Sollte der Undo / Redo-Befehl dafür verantwortlich sein, das Löschen der 3D-Teile zu übernehmen (was wird eigentlich vom 3D-Part-Manager gemacht)? Dies würde bedeuten, dass der Undo / Redo-Befehl auch dafür verantwortlich wäre, die Ansichten zu benachrichtigen, um die GUI zu aktualisieren.
Oder sollte der Undo / Redo-Befehl eine interne Kopie aller 3D-Teile erstellen, die gelöscht werden und der 3D-Teilemanager die 3D-Teile löschen?
Oder gibt es eine andere bessere Lösung?
Danke für Ihre Hilfe!
Sie möchten eine kleine Variation dazu: das Memento-Muster . Sie speichern Snapshots Ihrer vollständigen Objektstruktur oder nur alle Unterschiede bei jeder Änderung. Bewaffnet mit dieser sukzessiven Geschichte der Veränderungen, können Sie dann durch Befehle nach Herzenslust rückwärts und vorwärts gehen, ohne abhängige Objekte zu verlieren.
Tags und Links language-agnostic design-patterns undo