Pregunta

Mejores prácticas: Datos del Contrato de versiones , y afirman:

  

No retire los miembros de datos en versiones posteriores, incluso si el isRequired propiedad fue dejada en su propiedad predeterminada de false en las versiones anteriores.

Puede alguien sugerir ninguna razón para esto? No llevan a cabo. Ya que dicen que está bien para agregar miembros de datos en una versión posterior, parece que la eliminación sería muy bien también -. Efectivamente, la versión más antigua vería como un complemento

La diferencia, supongo, es que se supone añadir nuevos miembros al final (con la propiedad Solicitar en la DataMemberAttribute), mientras que la propiedad siendo eliminado probablemente no sería al final. Pero también dicen que los miembros faltantes serán dejadas a su valor por defecto durante la carga, por lo que es claro que los miembros que faltan están bien.

¿Qué me falta? ¿Qué problemas de interoperabilidad versión iba a causar (ambos con visión de compatibilidad y la compatibilidad hacia atrás) si Obsoleted una característica de mi producto y quité la propiedad [DataMember] que va con ella?

Además, si decidí que no estaba interesado en adelante compatibilidad (es decir, si yo no estaba preocupado por las versiones anteriores de creación de ficheros más recientes), se siguen aplicando este tipo de problemas?

¿Fue útil?

Solución

Simplemente porque los consumidores de servicios externos pueden proporcionar / utilizar esos datos (que fueron creados antes de quitar algunos de los miembros). En caso de que haya cambiado método de servicio de firma, DataContractSerializer no será capaz de reconocer DataContract más, porque de los miembros de datos desconocidos.

Así que si sus consumidores de servicios son todos conocidos, se puede manipular fácilmente los miembros de datos en su propia voluntad, siempre y cuando:

  • no se rompen los consumidores o
  • informar adecuadamente del cambio

Otros consejos

Uno de los problemas es que, incluso si no se rompe durante la serialización / deserialización, podría ser tirar de datos - lo que significa que no se puede con éxito los datos de ida y vuelta de nuevo a la persona que llama. es decir, dado el método simple:

public SomeType Echo(SomeType obj) {
    return obj;
}

Si la persona que llama que está pasando el objeto de edad con la propiedad adicional, puede ser que deseen que el valor de vuelta. Puede activar esta (por separado) con el de datos API, pero francamente la gente rara vez se molestan con esto.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top