TL; DR - Va bene condividere una libreria POJO tra servizi?
In genere ci piace mantenere la condivisione tra servizi strettamente limitati a nessuno se possibile. Si è discusso se il servizio che condivide i dati debba fornire una libreria client per i client da utilizzare. Il client-lib è generalmente facoltativo per un client del servizio da utilizzare e può consumare l'API, a loro piacimento, sia che si usi il client-lib, sia che si usi una lingua alternativa e si utilizzino gli aspetti generali della libreria e simili.
Nel mio caso - considero un servizio che crea un oggetto di dati. Supponiamo che questo oggetto sia un PET. NON è l'entità del database, ma strettamente un POJO che rappresenta implicitamente i dati sottostanti. Questo POJO è ciò che l'API ha definito. Assumi: Pet - Età, Peso, Nome, Proprietario, Indirizzo, Specie, ecc.
Servizio 1 - PetKeeper: genererà un animale domestico per qualsiasi motivo e conserverà tutti i dati e dovrà fare riferimento a questo servizio per ottenere l'animale o apportare modifiche all'animale domestico, diciamo il nome le modifiche o la modifica dell'indirizzo devono essere effettuate tramite una chiamata API a questo servizio.
Servizio 2 - PetAccessor: questo servizio raccoglie gli animali domestici e esegue 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 qualche servizio rivolto all'utente desidera presentare in qualche modo questo oggetto "PET". Deve chiamare tramite un servizio API, che chiama un servizio, che chiama un servizio, ecc. Fino a quando non raggiunge il servizio che raccoglie le informazioni richieste e avvia il relay. Finalmente il servizio di interfaccia utente 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 ripeterlo) si applica solo al codice INSIDE di un servizio e non si applica ai servizi ma il punto è ancora lì. Cosa succede se aggiungiamo un campo ... dobbiamo modificare 5 servizi del POJO in ciascuno.
- o- Possiamo fornire una libreria Pet-Objects che contiene alcuni dei pojo dall'API e ogni servizio può importare / dipendere dalla libreria. Non c'è dipendenza dal / dai servizio / i 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 gli Oggetti di Dio.
Quali sono i pro / contro - qual è il miglior design? Che cosa hai fatto per passare i dati tra i servizi per ridurre al minimo la ripetizione delle stesse classi POJO rimanendo anche disaccoppiati?