Я ищу для реализации объекта, который ведется журналом или имеет постоянную транзакцию. То есть объект содержит данные (возможно, Карта). По мере внесения изменений в данные эти изменения сохраняются отдельно, изолированы, если вы захотите, чтобы любой внешний объект мог либо ссылаться на базовое состояние (до изменений), либо получать доступ к последним данным. Затем выполняется другая операция, которая фиксирует изменения в базовом состоянии.«Журналирование» или «дизайн транзакций»?
Это напоминает мне некоторую файловую систему ведения журнала Linux. Изменения в файловой системе записываются в журнал и только позже передаются в постоянное хранилище.
Возможно, это также похоже на концепцию «транзакции» в мире реляционной базы данных; то есть у вас есть некоторые данные, вы начинаете транзакцию и каким-то образом манипулируете данными. Параллельные процессы будут видеть старые данные без каких-либо изменений. Затем вы можете «отменить» транзакцию или «зафиксировать» свои изменения.
Я специально планирую реализовать это на Java, но, очевидно, это общий объектно-ориентированный шаблон, если он даже существует. Я надеюсь, что его можно хотя бы создать, но я не уверен в лучшем способе его реализации.
Кроме того, предположим, что объект содержит целую тонну данных, целую иерархию (вспомогательные объекты и т. Д.). Поэтому нельзя просто сохранить две копии всего дерева данных; это будет очень расточительно для памяти, и операция копирования (при фиксации) займет слишком много времени. Я хочу реализовать это в контексте игры с одной транзакцией на кадр, поэтому она действительно должна быть оптимальной.
Ничего себе, это действительно здорово, и до сих пор я никогда не смотрел в неизменные классы. У них есть определенные положительные моменты, и я думаю, что это действительно может быть лучшим решением этой проблемы! Единственный недостаток, который я вижу, - это утомительность воссоздания родительских объектов при каждом изменении дочернего объекта, но для других преимуществ я думаю, что смогу справиться с этим. – Ricket