Pregunta

Desde mi experiencia, los compromisos de compatibilidad con versiones anteriores / posteriores son la jaula dorada de la industria de ingeniería de software. En particular, he observado que este es el caso de los formatos de archivos de documentos y lenguajes de programación / API. Los clientes y socios odian cuando se rompen sus datos o códigos existentes; sin embargo, si nunca rompe la compatibilidad, puede limitar seriamente su capacidad de innovar a largo plazo.

¿Hay soluciones a este problema, aparte de la eliminación gradual de las características antiguas? Parece que la virtualización, como en el modo XP de Windows 7, es una posibilidad emocionante. ¿Hay otros?

Además, para aquellos de nosotros que queremos diseñar nuevos sistemas que estén tan preparados para el futuro como sea posible, ¿qué lecciones podemos aprender de los errores cometidos en el pasado en la industria?

¿Fue útil?

Solución

Innovar extendiendo, no reescribiendo las API públicas. Tener interfaces públicas genéricas consistentes para la funcionalidad de back-end. Puede reescribir módulos privados en cualquier momento siempre que proporcione a los módulos API públicos los resultados que esperan.

Realice sus mejoras en el back-end y deje la API lo más coherente posible. Cree nuevos módulos y documente con claridad cuando extienda las partes públicas de su API, la desaprobación de las formas antiguas vendrá naturalmente si proporciona formas nuevas y mejores de hacer cosas que se agregan a las formas antiguas.

Para formatos de documentos, siempre incluya números de versión y asegúrese de tener formas de admitir todas las versiones existentes. Al igual que con las API, agregue la nueva funcionalidad extendiendo, no reescribiendo.

Cuando desee realizar cambios fundamentales en la arquitectura general de su software, haga que la nueva versión incluya la anterior como un módulo: dará lugar a un mayor tamaño pero a un mejor soporte para datos y programas más antiguos.

Otros consejos

Use XML como base para su formato de archivo, y solo agregue a la especificación DTD, no lo elimine. De esta manera, sus archivos deben ser compatibles con versiones anteriores, lo cual es una ventaja.

Aquí hay un buen ejemplo: Uso de Puentes SLF4J para permitir la migración fácil desde un módulo de registro a otro en Java.

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