TL; DR - Czy można współdzielić bibliotekę POJO między usługami?
Zasadniczo chcemy, aby dzielenie między usługami było ściśle ograniczone do żadnego, jeśli to możliwe. Odbyła się dyskusja, czy usługa udostępniająca dane powinna zapewniać bibliotekę klienta do użytku przez klientów. Klient-lib jest ogólnie opcjonalny dla klienta usługi i może korzystać z interfejsu API, jakkolwiek mu się podoba, czy używać klienta-lib, czy używać alternatywnego języka i korzystać z ogólnych aspektów biblioteki i tym podobnych.
W moim przypadku - uważam usługę, która tworzy obiekt danych. Załóżmy, że ten obiekt to PET. NIE jest to jednostka bazy danych, ale ściśle POJO, która pośrednio reprezentuje dane bazowe. To POJO zdefiniowało API. Załóżmy: zwierzę domowe - wiek, waga, imię, właściciel, adres, gatunek itp.
Usługa 1 - PetKeeper: Generuje zwierzaka z dowolnego powodu i zachowuje wszystkie dane i musi odwoływać się do tej usługi, aby uzyskać zwierzaka lub wprowadzić zmiany w zwierzaku, powiedzmy, że zmiana imienia lub zmiana adresu musi zostać wykonana za pomocą Wywołanie interfejsu API do tej usługi.
Usługa 2 - PetAccessor: Ta usługa zbiera zwierzaka i wykonuje kontrole walidacyjne
Usługa 3,4 - Więcej pośrednich połączeń serwisowych
Usługa 5 - interfejs użytkownika
Są to bardzo arbitralne, ale sprawa jest prosta. Interfejs użytkownika lub jakaś usługa skierowana do użytkownika chce w jakiś sposób przedstawić ten obiekt „PET”. Musi wywoływać za pośrednictwem interfejsu API usługę, która wywołuje usługę, która wywołuje usługę itp., Dopóki nie dotrze do usługi, która zbiera wymagane informacje i rozpoczyna przekazywanie z powrotem. Wreszcie usługa interfejsu użytkownika ma obiekt PET do wyświetlenia.
Jest to dość powszechne - ale przy naszej absolutnej mentalności duplikowaliśmy obiekt PET w każdej usłudze. Zasada DRY (nie powtarzaj się) dotyczy tylko kodu WEWNĄTRZ usługi i nie dotyczy wszystkich usług, ale kwestia nadal istnieje. Co jeśli dodamy pole ... musimy zmodyfikować po 5 usług POJO w każdym.
--LUB - Możemy zapewnić bibliotekę obiektów-zwierząt domowych, która zawiera niektóre pojęcia z interfejsu API, a każda usługa może importować / zależeć od biblioteki. Nie ma zależności od samych usług, ale tylko od biblioteki ogólnej. Podoba mi się ten pomysł, dzięki czemu każda usługa ma ten sam typ obiektu, a aktualizacje są łatwiejsze. Ale martwię się o Boskie Przedmioty.
Jakie są zalety / wady - jaki jest najlepszy projekt? Co zrobiłeś, aby przesyłać dane między usługami, aby zminimalizować powtarzanie tych samych klas POJO, jednocześnie pozostając rozłączonym?