TL; DR - Va bene condividere una libreria POJO tra servizi?
In generale, ci piace mantenere la condivisione tra servizi strettamente limitata a nessuno, se possibile. Si è discusso se il servizio che condivide o meno i dati debba fornire una libreria client da utilizzare per i client. Il client-lib è generalmente facoltativo da usare per un client del servizio e può consumare l'API comunque per favore, se usare il client-lib o usare un linguaggio alternativo e usare gli aspetti generali della libreria e simili.
Nel mio caso, sono considerato un servizio che crea un oggetto di dati. Supponiamo che questo oggetto sia un PET. NON è l'entità del database, ma rigorosamente un POJO che rappresenta implicitamente i dati sottostanti. Questo POJO è ciò che l'API ha definito. Assumi: Animale domestico - Età, Peso, Nome, Proprietario, Indirizzo, Specie, ecc.
Servizio 1 - PetKeeper: genererà un animale domestico per qualsiasi motivo e manterrà tutti i dati e dovrà fare riferimento a questo servizio per ottenere l'animale domestico o apportare modifiche all'animale domestico, diciamo che il cambio di nome o l'indirizzo deve essere effettuato tramite un Chiamata API a questo servizio.
Servizio 2 - PetAccessor: questo servizio raccoglie l'animale e fa controlli di convalida
Servizio 3,4 - Altre chiamate di servizio intermedie
Servizio 5 - Interfaccia utente
Questi sono molto arbitrari ma il punto è semplice. L'interfaccia utente o alcuni servizi rivolti all'utente desiderano presentare in qualche modo questo oggetto "PET". Deve chiamare tramite un'API un servizio, che chiama un servizio, che chiama un servizio, ecc. Fino a quando non raggiunge il servizio che raccoglie le informazioni richieste e riavvia il relè. Infine, il servizio UI ha l'oggetto PET da visualizzare.
Questo è abbastanza comune - ma con la nostra mentalità assoluta, abbiamo duplicato l'oggetto PET in ogni servizio. Il principio DRY (non ripetere te stesso) si applica solo al codice INSIDE di un servizio e non si applica a tutti i servizi ma il punto è ancora lì. E se aggiungessimo un campo ... dobbiamo modificare 5 servizi del POJO in ciascuno.
--OPPURE-- Siamo in grado di fornire una libreria Pet-Objects che contiene alcuni pojo dall'API e ogni servizio può importare / dipendere dalla libreria. Non vi è alcuna dipendenza dai servizi stessi, ma solo dalla biblioteca generale. Mi piace questa idea in modo che ogni servizio abbia lo stesso tipo di oggetto e gli aggiornamenti siano più facili. Ma sono preoccupato per God-Objects.
Quali sono i pro / contro - qual è il miglior design? Che cosa hai fatto per trasferire i dati tra servizi per ridurre al minimo la ripetizione delle stesse classi POJO rimanendo allo stesso tempo disaccoppiato?