Serializar: qué es y qué se pierde
Lo que cruza el puente deja de ser tu objeto y pasa a ser texto. Las cuatro cosas que se pierden por el camino, por qué eso es una propiedad y no un defecto, y las dos consecuencias que hay que diseñar.
Un valor, no un objeto
const filtro = { texto: 'x', aplicar() { … } };filtro.padre = filtro; // una referencia a sí mismoawait invoke('buscar', { filtro }); // ✗ ni siquiera sale de la webviewLo que se manda no es filtro: es una descripción de sus datos. Y una descripción de datos no puede contener código, ni identidad, ni ciclos.
La primera consecuencia: no hay referencias, hay identificadores
Como la identidad no cruza, el frontend no puede tener una referencia a algo del core. Tiene una copia, y si quiere volver a hablar de esa cosa, tiene que nombrarla.
De ahí sale un patrón que gobierna toda la aplicación:
el core devuelve datos + un identificadorel frontend guarda los datos y usa el identificador para pedir operacionesel core resuelve el identificador contra lo suyoQue es exactamente lo que el nivel 14.4 pedía por razones de seguridad, y aquí aparece otra vez por razones de mecánica. Las dos veces la conclusión es la misma: el identificador es el vínculo, y el core es quien sabe qué significa.
La segunda: la copia envejece
Lo que el frontend tiene es una foto. En el instante en que la recibe ya podría estar desactualizada, y desde luego lo está después de cualquier mutación —que es el problema del nivel 15.5—.
Eso obliga a decidir, y a decidirlo explícitamente:
- Quién manda. El core, siempre. La copia del frontend es presentación.
- Cuándo se refresca. Al mutar, devolviendo el estado nuevo; y por eventos, cuando el cambio viene de otro sitio.
- Qué se hace si difieren. Casi siempre: gana el core y se repinta. Y si el usuario tenía algo a medias, avisar antes de tirarlo.
Por qué la pérdida es una propiedad
Merece cerrar con esto, porque suena a limitación y es lo contrario. Si el frontend pudiera tener una referencia de verdad a un objeto del core —con sus métodos, con su identidad— entonces podría llamar a esos métodos, y la frontera del nivel 4.5 no existiría: no habría un canal con comandos declarados, habría acceso directo.
Que solo crucen datos es lo que hace que la superficie sea enumerable. La serialización no es un peaje que el framework cobra: es la frontera.