Ich bin auf der Suche nach einem Objekt, das aufgefunden wird oder eine persistente Transaktion enthält. Das heißt, das Objekt enthält Daten (möglicherweise eine Map). Wenn Änderungen an den Daten vorgenommen werden, werden diese Änderungen separat gespeichert, je nach Bedarf, sodass jedes externe Objekt entweder auf den Basiszustand verweisen kann (vor den Änderungen) oder auf die neuesten Daten zugreifen kann. Dann gibt es eine andere Operation, die die Änderungen in den Basiszustand festschreibt."Journaling" oder "Transaktionen" Design-Muster?
Es erinnert mich etwas an das Linux-Journaling-Dateisystem. Dateisystemänderungen werden in ein Journal geschrieben und erst später in den permanenten Speicher übernommen.
Es ähnelt vielleicht auch dem Konzept einer "Transaktion" in der relationalen Datenbank Welt; das heißt, Sie haben einige Daten, Sie beginnen eine Transaktion und manipulieren die Daten in irgendeiner Weise. Gleichzeitige Prozesse sehen die alten Daten mit keiner Ihrer Änderungen. Dann können Sie entweder die Transaktion "zurücksetzen" oder Ihre Änderungen "committen".
Ich bin speziell auf der Suche nach dies in Java zu implementieren, aber offensichtlich ist es ein allgemeines objektorientiertes Muster, wenn es überhaupt existiert. Ich hoffe, dass es zumindest erstellt werden kann, aber ich bin mir nicht sicher, wie ich es am besten umsetzen könnte.
Angenommen, das Objekt enthält eine ganze Tonne Daten, eine ganze Hierarchie (Unterobjekte usw.). Man kann also nicht einfach zwei Kopien des gesamten Datenbaums behalten; es wäre sehr speicherverschwendend und die Kopieroperation (beim Festschreiben) würde viel zu lange dauern. Ich versuche, dies im Kontext eines Spiels zu implementieren, mit einer Commit-Operation pro Frame, also muss es wirklich optimal sein.
Wow, das ist eigentlich wirklich cool und ich habe bis jetzt nie wirklich in unveränderbare Klassen geschaut. Sie haben definitiv positive Ergebnisse und ich denke, dass dies die beste Lösung für dieses Problem sein könnte! Der einzige Nachteil, den ich sehe, ist die Langweiligkeit, Elternobjekte jedes Mal neu zu erstellen, wenn sich ein Kindobjekt ändert, aber für die anderen Vorteile denke ich, dass ich damit zurechtkommen kann. – Ricket