TL; DR: ¿Puedo compartir una biblioteca POJO entre servicios?
En general, nos gusta mantener el intercambio entre los servicios estrictamente limitado a ninguno si es posible. Ha habido cierto debate sobre si el servicio que está compartiendo datos debe proporcionar una biblioteca cliente para que los clientes la utilicen. El cliente-lib es generalmente opcional para que un cliente del servicio lo use y puede consumir la API, sin embargo, le agradan, ya sea para usar el cliente-lib o para usar un lenguaje alternativo y usar los aspectos generales de la biblioteca y demás. p>
En mi caso, estoy considerando 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. Suponga: mascota: edad, peso, nombre, propietario, dirección, especie, etc.
Servicio 1 - PetKeeper: generará una mascota por cualquier motivo, conservará todos los datos y deberá hacer referencia a este servicio para obtener la mascota o realizar modificaciones en la mascota. Digamos el nombre los cambios o el cambio de dirección se deben realizar a través de una llamada a la API de este servicio.
Servicio 2 - PetAccessor: este servicio reúne a 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 UI o algún servicio orientado al usuario desea presentar de alguna manera este objeto "PET". Debe llamar a través de una API a un servicio, que llama a un servicio, que llama a un servicio, etc., hasta que llega al servicio que reúne la información requerida y comienza la retransmisión. Finalmente, el servicio de interfaz de usuario 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 DRY (no se repita) solo se aplica al código DENTRO de un servicio y no se aplica a todos los servicios, pero el punto sigue ahí. Que tal si agregamos un campo ... debemos modificar 5 servicios del POJO en cada uno.
--OR-- Podemos proporcionar una Pet-Objects-Library que contiene 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 objetos de Dios.
¿Qué son los pros / contras? ¿Cuál es el mejor diseño? ¿Qué has hecho para pasar datos entre servicios para minimizar la repetición de las mismas clases de POJO y al mismo tiempo permanecer desconectado?