[VB05] Interaktionen des User protokollieren

Jacka

Erfahrenes Mitglied
Hi!

Ich bin´s und nerve euch bestimmt schon wieder! ;-]

Ist es möglich die User Interaktivitäten zu protokollieren, um ihm später die Möglichkeit
zu geben die letzte Eingabe wieder rückgängig zu machen?
In vielen Programmen ist es möglich seine letzten Ausführungen, z.B. das Löschen eines Textes rückgängig zu machen.

Bietet .NET bereits für die "Anwenderprotokollierung" etwas (Klasse o.ä.) oder muss man
so etwas selbst gestalten?


Vielen Dank und Grüße,
Jacka
 
Kommt drauf an, was genau du protokollieren willst. Betrifft es alle Aktionen die ein User in deiner Anwendung macht, oder betrifft das beispielsweise nur die Änderung an einem Objekt?
 
Hi!

Der Benutzer hat eine Tabelle mit Werten, dieser kann er verändern. Datensätze/Zeilen löschen, Werte zusammen zählen etc. Momentan ist es nur möglich zum letzten Speicherpunkt zurück zu gehen. Wenn man vergessen hat zwischendurch zu speichern und löscht dann eine Wert den man noch benötigt, ist das natürlich ärgerlich. Es kommt auch mal vor, dass man nach einer Aktion schnell speichert und dann erst feststellt, das man einen Fehler gemacht hat.
Daher würde ich gerne eine Funktion zur Verfügung stellen, die letzte Aktion oder Aktionen rückgängig machen zu können.

Man könnte es "zu Fuß" machen und auf die möglichen Ereignisse reagieren, z.B.
Aktion: Datensatz "xyz" wurde gelöscht -> Reaktion: Erstelle Datensatz "xyz".
Wir denke ich schwierig bei Änderungen an Werten oder? Man müsste sich jeden geänderten Wert "merken". :confused:

Ich dachte, vielleicht gibt es eine Möglichkeit das eleganter zu lösen.
An eine Speicherung der Änderungen in eine DB hatte ich auch schon nachgedacht, doch wie sieht es da mit der Performence aus?

Viele Grüße,
Jacka
 
Hallo!

Wenn du eine Undo Funktionalität implementieren willst,so müsstest du dir deine Aktionen (und die davon verursachten Änderungen (Deltas)) merken können und zu jeder Aktion eine entsprechende Gegenation haben welche die von der Aktion durchgeführten Änderungen wieder Rückgängig macht. Anschliessend führst du die Änderungen wieder schrittweise "rückgängig" aus um wieder zum gewünschten Ursprungszustand zu gelangen. Das kann je nach Ausbaustufe beliebig komplex werden.

Wenn du deine Aktionen über ein Command-Pattern kapselst kannst du diese über eine entsprechend zum jeweiligen Command passende UndoStrategy wieder Rückgänig machen.

Eine weitere Strategie wäre es das zu verändernde Objekt (bzw. der relevante Teil davon) vor jeder Veränderung zu Klonen und dann je nach der zurück zu machenden Änderung wieder den entsprechenden Objekt-Klone zu reaktivieren.

Gruß Tom
 
Hi!

Command-Pattern scheinen nicht so trivial zu sein, aber man ist dann doch sehr flexibel.
Ich werde es erst einmal ausprobieren! (Sobald ich es ganz verstanden habe! :) )

Vielen Dank für die Hilfe!

Grüße
Jacka
 
Mich interessiert dieses Thema auch.
@Norbert: Ich hab mir mal deinen Link angeschaut, hat mir auch geholfen!
Doch nehmen wir mal an der Taschenrechner hat nicht nur eine Rechenfunktion sondern auch noch andere Funktionen; der User kann z.B. noch ein Bild auswählen und angezeigt bekommen. Damit man diese Aktion rückgängig machen kann brauch ich ja eine ganz andere Klasse, die von "Command" erbt und ganz anders funktioniert als die Klasse zum Rückgängigmachen der Taschenrechnerberechnung. Und je mehr Funktionen mein Programm hat um so mehr verschiedene Klassen brauche ich.
Wenn ich mir jetzt große Programme wie OpenOffice oder Word anschaue, dann muss das ja ein riesen Programmieraufwand sein, für Alles eine extra Klasse zu schreiben um eine Rückgängig-Funktion anzubieten.
Geht das nicht irgendwie hübscher?
 
Grundlegend kannst du dir für jeden Command auch eine Rückgängig-Funktionalität implementieren. D.h. der Command kann sich selbst rückgängig machen. Die Commands hältst du dann ein einer Liste und kann damit erneut aufgerufen werden.
 

Neue Beiträge

Zurück