TL; DR: ¿está bien compartir una biblioteca POJO entre servicios?
En general, nos gusta mantener el intercambio entre servicios estrictamente limitado a ninguno si es posible. Se ha debatido si el servicio que comparte datos debería proporcionar una biblioteca de clientes para que los clientes la utilicen. El client-lib es generalmente opcional para que lo use un cliente del servicio y puede consumir la API como quiera, ya sea que use el client-lib, o use un lenguaje alternativo y use los aspectos generales de la biblioteca y demás.
En mi caso, considero un servicio que crea un objeto de datos. Asumamos que este objeto es un PET. NO es la entidad de la base de datos, sino estrictamente un POJO que representa implícitamente los datos subyacentes. Este POJO es lo que la API ha definido. Asumir: mascota: edad, peso, nombre, propietario, dirección, especie, etc.
Servicio 1 - PetKeeper: generará una mascota por cualquier motivo y retendrá todos los datos y debe hacer referencia a este servicio para obtener la mascota, o hacer modificaciones a la mascota, digamos que los cambios de nombre o cambio de dirección deben hacerse a través de un Llamada API a este servicio.
Servicio 2 - PetAccessor: este servicio reúne las mascotas y realiza comprobaciones de validación
Servicio 3,4 - Más llamadas de servicio intermedio
Servicio 5 - Interfaz de usuario
Estos son muy arbitrarios, pero el punto es simple. La interfaz de usuario o algún servicio orientado al usuario desea presentar de alguna manera este objeto "PET". Debe llamar a través de una API un servicio, que llama a un servicio, que llama a un servicio, etc., hasta que llegue al servicio que reúne la información requerida y comience la retransmisión. Finalmente, el servicio de IU tiene el objeto PET para mostrar.
Esto es bastante común, pero con nuestra mentalidad absoluta, duplicamos el objeto PET en cada servicio. El principio SECO (no repetir) solo se aplica al código DENTRO de un servicio y no se aplica a todos los servicios, pero el punto sigue ahí. ¿Qué pasa si agregamos un campo ... debemos modificar 5 servicios del POJO en cada uno?
O bien, podemos proporcionar una biblioteca de objetos de mascota que contenga algunos de los pojo de la API y cada servicio puede importar / depender de la biblioteca. No hay dependencia de los servicios en sí, sino solo de la biblioteca general. Me gusta esta idea para que cada servicio tenga el mismo tipo de objeto y las actualizaciones sean más fáciles. Pero me preocupan los Dios-Objetos.
¿Cuáles son las ventajas y desventajas? ¿Cuál es el mejor diseño? ¿Qué ha hecho para pasar datos entre servicios para minimizar la repetición de las mismas clases de POJO y al mismo tiempo permanecer desconectado?