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:
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:
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?
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.
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
Für die korrekte und bewährte Implementierung der UNDO-Funktionalität ist das Befehlsmuster
Alles scheint korrekt zu sein, aber ich würde lieber Stack als Liste verwenden. Es wird im chronologischen Bestellaspekt nützlich sein.
Es ist schwer, dies zu übersehen Simple-Undo-Redo-Library- for-Csharp-NET beim Hinzufügen von Undo / Redo-Funktionalität zu bestehenden Projekten.
Tags und Links .net c# architecture system-design