Sé que es una pregunta amplia, así que intentaré ser lo más específico posible. Esta pregunta es más una pregunta "organizativa" que técnica.
Tenemos un proyecto de varios lados con estos componentes principales:
- Un servidor que aloja la lógica empresarial central (modelos de datos)
- Un backoffice para clientes que utiliza la lógica comercial central
- Una API de aplicación (REST) que también utiliza la lógica empresarial central
- Existen aplicaciones para teléfonos inteligentes (iOS y Android) que utilizan la aplicación API
- Hay otra aplicación de tableta (android) diferente de la del teléfono inteligente que usa la misma aplicación API.
Pronto estaré en producción con clientes activos. Y como cualquier proyecto, necesitaré mantener todos los componentes diferentes a lo largo del tiempo. Eso significa que se puede actualizar todo lo siguiente:
- El código de la lógica empresarial central en el servidor (utilizado por el back-office, la API y, como efecto secundario, por las aplicaciones móviles)
- la API en sí (utilizada por aplicaciones de teléfonos inteligentes y tabletas)
- todas las aplicaciones móviles (a través de appstore / googleplay)
Por supuesto, yo mismo puedo cambiar las partes del lado del servidor (código de lógica de negocio central y código API). Sin embargo, los clientes deben descargar nuevas aplicaciones móviles en la tienda de aplicaciones / googleplay, y no puedo estar seguro de que estén actualizadas.
¿Podría proporcionar alguna orientación, consejos de buenas prácticas, para que estas actualizaciones sean fluidas y sin riesgos para el cliente?
¿Qué componente necesito para "versión"? ¿Cómo garantizar que todo funcione incluso si el cliente no actualiza su aplicación móvil? ¿Debo obligarlo a actualizar para facilitar mi trabajo?
En una palabra, ¿cómo debo organizarme para hacer que mi proyecto multifacético se viva con el tiempo?
Respuestas:
Como no puede controlar cuándo se actualizarán las aplicaciones móviles a una nueva versión, debe versionar al menos su API REST. Si no lo hace, será imposible realizar cambios retrocompatibles en esa interfaz.
Además de la API REST, es una buena idea versionar también las otras interfaces de comunicación que pasan por una interfaz de red. De esa manera, tampoco está obligado a actualizar todos los clientes de backoffice al mismo tiempo que los servidores y puede implementar una migración gradual a una nueva versión con un período de "prueba beta".
Además de versionar las interfaces de comunicación, también debe intentar hacer que los cambios sean compatibles con versiones anteriores tanto como sea posible. Idealmente, podría implementar una nueva versión de interfaz que todavía sea totalmente compatible con los clientes antiguos para que no noten que nada ha cambiado.
fuente
Esta publicación hace un punto interesante sobre su pregunta.
De una manera más práctica, si tiene 3 componentes:
Puede usar el esquema de versiones típico de Mmp (Major.minor.patch) para cada uno, pero en su URL de back-end puede poner algo como
http://youhost/M.m/resourceURI
.A medida que evolucione y los cambios en la API no afecten su contrato con los consumidores, mantenga el estado
M.m
tal como está en la URL. Desde el momento en que realiza un cambio en el BackEnd que afecta a sus consumidores (ya sea un cambio en el comportamiento o un objeto diferente), utiliza unM.m+1
,M+1.m+1
oM+1.m
.La forma de mantener las cosas en funcionamiento es implementar el nuevo Back-End simultáneamente con el anterior, mientras los usuarios instalan los nuevos consumidores y descontinúan lentamente la API anterior.
Puede ver una respuesta mucho mejor que la mía aquí: Versioning REST API en Stackoverflow
fuente
Le recomiendo que instale un servidor de integración continua, lo conecte a su repositorio de código y un repositorio de instantáneas / lanzamiento y automatice sus compilaciones. Esto tendrá una serie de ventajas:
Mi experiencia ha sido con herramientas de código abierto: SVN, Maven 2, Jenkins y Nexus, pero hay alternativas a todos estos.
No subestimes el tiempo de aprendizaje para poner a tu equipo al día. Pero una vez que estén al día, nunca volverán.
fuente
Para un equipo relativamente pequeño para el desarrollo y la implementación, el modelo de compatibilidad del Cliente N-1 empleado por IBM Jazz puede funcionar bastante bien
Intente mantener a los clientes y servidores en el mismo número de versión. [En lugar de gestionar una matriz de versiones independientes y sus compatibilidades]
Establezca una política de que la versión de cliente Xyy debería funcionar con todas las versiones de servidores superiores a Xyy pero inferiores a X + 2.0.0
Para un servidor versión 4.0, idealmente debería haber una versión de cliente 4.0 para cada tipo de cliente. Sin embargo, la compatibilidad debe mantenerse para permitir versiones ligeramente diferentes de clientes y servidores.
Una versión de cliente 4.x debe ser compatible con servidores versión 4.xy superior pero inferior a 6.0; Un servidor 4.x debe ser compatible con todos los clientes versión 3.0 y superior, pero menor o igual que 4.x
De esta manera, puede actualizar una versión en el servidor sin preocuparse por el lanzamiento inmediato de nuevas versiones de los clientes, pero solo tendrá una ventana de compatibilidad bien definida para mantener.
Ref: IBM Jazz Model [ https://www.ibm.com/support/knowledgecenter/en/SSYMRC_6.0.0/com.ibm.jazz.install.doc/topics/c_n-1.html]
fuente
Primero, comencemos por enmarcar el problema un poco diferente. Ha preguntado qué software necesita para "versionar". Versión es un término sobrecargado en CS, y podría significar unas 100 cosas diferentes. Lo principal que miraría es:
Entonces, como es lo más nebuloso y lo más interesante para mí, me voy a centrar en el n. ° 2. No hay una solución única para cortar la galleta para la gestión de la configuración. Las reglas que funcionan bien para un equipo de 2 o 3 pueden ser demasiado flexibles para mantener la cordura en un proyecto que requiere cientos de trabajadores. Las reglas que funcionan para el equipo grande pueden requerir demasiados gastos generales para el equipo pequeño. Lo más probable es que tenga que improvisar algo propio para reunir algo, pero usaría la siguiente lista como una forma de desarrollar las especificaciones para su sistema de administración de configuración:
¿Necesita ayuda para responder las preguntas anteriores? Probablemente debería contratar a un consultor o gerente de ingeniería de software ... respondiendo que puede llenar los libros de texto y está fuera del alcance de este tipo de foro.
fuente