TL; DR - É permitido compartilhar uma biblioteca POJO entre serviços?
Geralmente, gostamos de manter o compartilhamento entre serviços estritamente limitado a nenhum, se possível. Houve um debate sobre se o serviço que está compartilhando dados deve ou não fornecer uma biblioteca de clientes para uso dos clientes. A client-lib geralmente é opcional para um cliente do serviço e pode consumir a API da forma que desejar, seja para usar a client-lib ou para usar uma linguagem alternativa e usar os aspectos gerais da biblioteca e tal.
No meu caso - sou considerado um serviço que cria um objeto de dados. Vamos supor que esse objeto seja um PET. NÃO é a entidade do banco de dados, mas estritamente um POJO que representa implicitamente os dados subjacentes. Esse POJO é o que a API definiu. Suponha: Animal de estimação - Idade, Peso, Nome, Proprietário, Endereço, Espécie, etc.
Serviço 1 - PetKeeper: Ele gera um animal de estimação por qualquer motivo e retém todos os dados e deve fazer referência a esse serviço para obtê-lo ou fazer modificações no animal de estimação, digamos que o nome seja alterado ou a alteração de endereço deve ser feita por meio de um Chamada de API para este serviço.
Serviço 2 - PetAccessor: Este serviço reúne os animais de estimação e faz verificações de validação
Serviço 3,4 - Mais chamadas de serviço intermediárias
Serviço 5 - Interface do usuário
Estes são muito arbitrários, mas o ponto é simples. A interface do usuário ou algum serviço voltado ao usuário deseja apresentar de alguma forma esse objeto "PET". Ele deve chamar por meio de uma API um serviço, que chama um serviço, que chama um serviço, etc., até atingir o serviço que reúne as informações necessárias e inicia a retransmissão. Finalmente, o serviço de interface do usuário tem o objeto PET para exibir.
Isso é bastante comum - mas com nossa mentalidade absoluta, duplicamos o objeto PET em todos os serviços. O princípio DRY (não se repita) se aplica apenas ao código DENTRO de um serviço e não se aplica a todos os serviços, mas o ponto ainda está lá. E se adicionarmos um campo ... devemos modificar 5 serviços do POJO em cada um.
--OR-- Podemos fornecer uma Pet-Objects-Library que contém alguns dos pojo da API e cada serviço pode importar / dependência da biblioteca. Não há dependência no (s) serviço (s) em si, mas apenas na biblioteca geral. Eu gosto dessa ideia para que cada serviço tenha o mesmo tipo de objeto e as atualizações sejam mais fáceis. Mas estou preocupado com os objetos de Deus.
Quais são os prós / contras - qual é o melhor design? O que você fez para passar dados entre serviços para minimizar a repetição das mesmas classes POJO e ao mesmo tempo permanecer desacoplado?