¿Cuáles son algunos elementos de diseño de los esquemas de serialización compatibles con versiones futuras de software?

La cuestión es: no importa qué persista o transporte, no lo sobre-diseñe o terminará con un software que es más difícil de mantener por las razones equivocadas. Es mucho más fácil agregar funciones a una base de código más simple que refactorizar un diseño más complejo para acomodar tanto los requisitos reales como las conjeturas puras.

Ahora, para ser más práctico, el enfoque es básicamente doble:

  1. Los protocolos y el esquema siempre deben incluir números de versión, por lo que podrá verificar la necesidad de migrar datos o actualizar las aplicaciones cliente.
  2. Dicho esto, para cada aumento en el número de versión, se debe proporcionar un mecanismo de migración. Es decir, si la aplicación encuentra un objeto que tenga cualquier número de versiones anterior a la versión actual del protocolo, debería poder reproducir los cambios en ese objeto para cada versión más nueva.

Lo que no puede predecir es qué elementos nuevos y obligatorios podrían agregarse a su esquema en futuras versiones; confíe en mí en eso: nunca adivinará todos los cambios de requisitos futuros en el momento del diseño. Para manejar esta situación, puede decidir entre (de acuerdo con las necesidades y posibilidades de su aplicación):

A. proporcionar medios para actualizar los valores en los pares con datos reales;

B. invalidar objetos obsoletos;

C. generar valores de marcador de posición para llenar los vacíos;

D. mover datos no anulables a sus propios tipos foráneos;

E. verificar la nulidad de los campos dados en todo el código.