Arena. Manejo de transacciones.

Introducción

Si estamos modificando los datos de una entidad, es frecuente hacerlo en un formulario que tiene dos acciones posibles: aceptar o cancelar los cambios.

edicion-1

Cuando la UI tiene binding, cualquier modificación que haga el usuario impacta directamente en el modelo. ¿Qué alternativa tenemos entonces para volver atrás los cambios si el usuario desiste la acción?

Sincronización mediante repositorios persistentes

Si estamos en un esquema distribuido, una opción puede ser que nuestro repositorio trabaje con un medio persistente, con dos objetivos:

En ese caso cuando el usuario presiona el botón Aceptar se envía un mensaje al repo para que actualice el objeto del formulario, caso contrario el repo no recibirá ninguna notificación. Cuando un usuario en otra VM diferente quiere actualizar el mismo cliente, el objeto repositorio toma la información del medio persistente para recrear los datos del cliente actualizados. El medio persistente actúa como “la única fuente de verdad”, y mientras que los objetos que están en el ambiente son simplemente un buffer o estado temporal antes de ser almacenados en el medio.

two_users

Trabajo en una única VM con binding

Si en nuestra aplicación el repositorio considera la VM de objetos como la single source of truth, el mecanismo de binding puede traer efectos colaterales: cada vez que el usuario modifique el nombre, eso tiene un impacto inmediato en el modelo y tenemos que pensar qué debemos hacer si el usuario quiere cancelar la operación de edición para que efectivamente se deshagan los cambios.

single_vm

Opción 1: Manejo manual de los cambios

La primera alternativa consiste en generar una copia del objeto original y asociarlo como modelo de nuestra ventana de modificación.

copy

Opción 2: Elementos transaccionales de Arena

Arena propone un esquema para no tener que resolver esto manualmente:

Y con esto nos alcanza, Arena utiliza la vista para delimitar el alcance de una transacción: cuando el usuario presiona el botón Aceptar se finaliza (commit). En caso de error, o de presionar el botón Cancelar, la transacción se deshace (rollback), y los cambios se pierden.

El lector interesado puede consultar el ejemplo de los celulares que trabaja automáticamente la transacción.

Links relacionados