Estoy buscando implementar un objeto que está registrado por diario, o tiene una transacción persistente en él. Es decir, el objeto contiene datos (quizás un mapa). A medida que se realizan cambios en los datos, esos cambios se mantienen por separado, en la zona de pruebas si se quiere, de modo que cualquier objeto externo puede hacer referencia al estado base (antes de los cambios) o puede acceder a los datos más recientes. Luego hay otra operación que compromete los cambios en el estado base.patrón de diseño "Diario" o "transacciones"?
Me recuerda algo al sistema de archivos de diario de Linux. Los cambios en el sistema de archivos se escriben en un diario y luego solo se envían al almacenamiento permanente.
También es quizás más similar al concepto de una "transacción" en el mundo de las bases de datos relacionales; es decir, tiene algunos datos, comienza una transacción y manipula los datos de alguna manera. Los procesos concurrentes verán los datos antiguos sin ninguno de sus cambios. Luego puede "retrotraer" la transacción o "comprometer" sus cambios.
Estoy específicamente buscando implementar esto en Java, pero obviamente es un patrón general orientado a objetos, si es que existe. Espero que al menos se pueda crear, pero no estoy muy seguro de la mejor manera de implementarlo.
Además, supongamos que el objeto contiene toda una tonelada de datos, una jerarquía completa (subobjetos, etc.). Entonces uno no puede simplemente guardar dos copias de todo el árbol de datos; sería un desperdicio de memoria y la operación de copia (en la confirmación) tomaría demasiado tiempo. Estoy buscando implementar esto en el contexto de un juego, con una operación de compromiso por cuadro, por lo que realmente debe ser óptimo.
Guau, eso es realmente genial y nunca he visto clases inmutables hasta ahora. Tienen positivos definitivos y creo que esta puede ser la mejor solución para este problema. El único inconveniente que veo es la tediosidad de volver a crear objetos padre cada vez que cambia un objeto secundario, pero para los demás beneficios, creo que puedo sobrellevarlo. – Ricket