Wpis z mikrobloga

Cześć mirki, mam takie pytanka z zakresu podstawy mikroserwisów. Załóżmy, że mamy jakieś trzy przykładowe mikroserwisy, np. jeden zarządza Car, drugi Engine a trzeci Driver. I teraz chcemy na przykład zwrócić listę, w którym pojedyńczy element zawiera każdego kierowce, samochody którym jeździ i ich silniki. I teraz pytania - wychodzi np. na to, że mikroserwis zwracający odpowiedź (powiedzmy, że będzie to Driver) będzie musiał wiedzieć co to Car i Engine - czyli normalnie implementować DTO tych klas w mikroserwisie od Drivera? Czy to nie powoduje dużego dublowania zbędnego kodu, który potem musi przy zmianach być edytowany w wielu miejscach? Czy ja nie znam jakiejś mądrej sztuczki?
I drugie pytanie - powiedzmy, że muszę zwrócić listę, która posiada te trzy rzeczy - w sensie Driver, dla niego Car i Engine (teraz akurat załóżmy, że jest po jednym) w jednym elemencie listy. W jaki sposób zrobić to najładniej - stworzyć nową klase np. Response i w niej powyższe klasy jako pola? W przypadku wielu kombinacji odpowiedzi porobiłoby się mnóstwo wariacji klasy Response z podobnymi nazwami i niezły bałagan - nie jestem pewien czy to najlepsze wyjście. Pozdrawiam i liczę na pomoc :D
#java #spring #programista15k #mikroserwisy
  • 11
@wpoldokomina: Takie dostałem zadanie rekrutacyjne i kombinuje w jaki sposób rozwiązać ten problem. No właściwie to kompletnie inne i bardziej zbudowane, ale problem, który mam jest na takiej zasadzie co opisałem.
Czy ja nie znam jakiejś mądrej sztuczki?


@throaway: Tradycyjnie w Javie jakikolwiek kod wspólny dla paru modułów wędrował do odrębnego dependency. Wraz z monorepo wydaje się wystarczającym rozwiązaniem. W razie współpracy z innymi językami można pokusić się o wystawienie dokumentacji API w jakimś uznanym formacie, np. tak jak to robi Swagger.

A odnośnie dalszej części to pukanie do jednej bazy pod spodem trochę kłóci się z ideą mikroserwisów, ale co do
@throaway: to słaby przykład na architekturę mikroserwisowa ale skoro już musisz to pamiętaj, że każdy serwis ma swój storage i swoje obiekty nie dzielone z innymi żeby nie było dependency. Także potrzebujesz jakiś front albo API który będzie działał jako agregat i mapowal entities.