Wie rückgängig machen Funktionalität implementieren?

8

In meiner Anwendung möchte ich dem Benutzer eine kleine Rückgängig-Funktionalität bieten. Es gibt nicht viele Aktionen, die vom Benutzer rückgängig gemacht werden können. Besonders die Aktionen sind:

  • Hinzufügen von Notizen zu einem Objekt
  • Färbe ein Objekt
  • Kennzeichnen Sie einen Objcet mit einer Zeichenfolge

Jetzt habe ich darüber nachgedacht, wie ich das umsetzen kann. Ich dachte zuerst an eine Aktionsklasse, die die abstrakte Basisklasse für die 3 verschiedenen Aktionen ist, die vom Benutzer ausgeführt werden können. Jedes Mal, wenn der Benutzer diese Aktionen übernimmt, wird eine neue geeignete Instanz einer Unterklasse dieser abstrakten Aktionsklasse erstellt und in eine Liste eingefügt, die alle Aktionen enthält.

Immer wenn der Benutzer etwas rückgängig machen möchte, wird die Liste dem Benutzer angezeigt und er kann auswählen, welche Aktion er rückgängig machen möchte.

Jetzt habe ich überlegt, was in einem solchen Aktionsobjekt gespeichert werden soll:

  • der Status des Objekts vor der Aktion
  • die tatsächliche Aktion, die ausgeführt wurde (z. B. die Zeichenfolge, die den Notizen eines Objekts hinzugefügt wurde)

Ich bin mir nicht sicher, ob das ausreicht. Ich dachte auch über eine chronologische Reihenfolge nach, aber das sollte notwendig sein, da die Liste chronologisch korrekt sein kann.

Gibt es noch andere Dinge, die ich beachten sollte?

    
Nate 13.12.2010, 18:02
quelle

6 Antworten

14

Rückgängig / Wiederholen wird häufig mit dem Befehlsmuster implementiert. Die Action -Klasse kann als Grundlage dafür verwendet werden, aber Sie müssen innerhalb jedes Befehls eine 'Ausführen'-Aktion und eine' Rückgängig'-Aktion ausführen. Hier ist ein Beispiel in der Praxis. Sie sollten die Befehle, die in einem Stapel ausgeführt werden, wahrscheinlich speichern, da dies die Implementierung wesentlich erleichtert und für den Benutzer viel einfacher ist.

    
Dr Herbie 13.12.2010, 18:11
quelle
9

Sie könnten so etwas einfach machen:

%Vor%     
ChaosPandion 13.12.2010 18:08
quelle
5

Sie sollten das Befehlsmuster für jede Aktion implementieren, die Sie rückgängig machen möchten:

Implementierung von Undo / Redo-Operationen ohne größere Änderungen im Programm

    
ArBR 13.12.2010 18:10
quelle
2

Für die korrekte und bewährte Implementierung der UNDO-Funktionalität ist das Befehlsmuster

    
TalentTuner 13.12.2010 18:08
quelle
2

Alles scheint korrekt zu sein, aber ich würde lieber Stack als Liste verwenden. Es wird im chronologischen Bestellaspekt nützlich sein.

    
Kirill Dubovikov 13.12.2010 18:08
quelle
0

Es ist schwer, dies zu übersehen Simple-Undo-Redo-Library- for-Csharp-NET beim Hinzufügen von Undo / Redo-Funktionalität zu bestehenden Projekten.

    
Jeremy Thompson 17.05.2013 01:50
quelle