Dateneingabe Bildschirm aktualisiert Modell in Echtzeit Objekte, bietet Undo und Redo, Live-Updates zu einem Modellobjekt mit dem Befehl Muster
-
26-09-2019 - |
Frage
Das bekannte Befehlsmuster wird häufig verwendet, wenn Sie ein Modell mit Undo / Redo-Funktionen implementieren mögen. Ich suche eine Referenzimplementierung (Beispiel) eine einfache Delphi Form, die Arbeitsgeräte Undo / Redo.
Von dem, was ich gesehen habe, einfach delphi Dateneingabeformulare mit drei Bearbeitungsfeldern, sechs Memo-Boxen und ein paar Combo-Boxen und anderen einfachen Steuerelemente bearbeiten, hat normalerweise keine Undo / Redo unterstützen.
Hat jemand einen gut gestalteten delphi Ansatz für Multi-Level-Undo / Redo-Unterstützung für ein komplexes Model-View-Controller-Design mit einer separaten Delphi Ansicht (Form) und Modellobjekte (Datenobjekte werden aktualisiert synchron mit allen Bearbeitungen zu sehen die Form und die Validierung und die Steuerlogik in Form, oder in dem Modell nicht eingebettet, sondern abgetrennt.
Es scheint mir, dass, wenn Sie nicht MVC verwenden haben, und man brauchte einfach Prototyp einer Delphi-Demo-Anwendung, die keine Modell oder Controller-Objekte hatte, dass Undo / Redo einer reinen einfache Delphi „one-form- Design ist-my-app“würde einfacher sein, aber es wäre komplizierter, wie Sie Objekte müssen aufzeichnen und wiedergeben und synchronisieren sie zu Delphi Form Aktionen wie TEdit.OnChange.
Lösung
Sie sollten folgende Muster verwenden:
- Modell-GUI-Mediator
- Synch zwischen Objekten Modell und GUI-Steuerung, so dass Sie nicht durch TDataset und DB-Aware Kontrollen begrenzt sind. Sie können Objekt-aware Kontrollen von jedem VCL-Steuerelemente erstellen. - Befehl
- Ihre Aktionen auf die Modellobjekte. Sollte durch Controller abgefeuert werden. - Memento
- Speicher interner Zustand von Datenobjekten für die Undo / Redo-Verhaltens Umsetzung
Geben Sie so schnell wie möglich I'will ein einfaches Beispiel auf meinem Blog www.danieleteti.it
Andere Tipps
Ich würde wahrscheinlich Basis, dass auf einem ClientDataSet:., Die Undo-Funktionen hat (und wenn ich mich richtig erinnere, ist es ziemlich einfach ist, Redo zu implementieren damit auch)
Bonus:. Sie können die Daten verwenden bewusst Kontrollen
Ich habe das Gefühl, Sie sind für eine Art von ORM Verhalten suchen.
Bei DelphiLive werde ich tun, eine Art von ORM-Schicht basiert sprechen auf ClientDataSets; sie sind ziemlich cool.
- jeroen