Jeśli chodzi o Microservices, cykle rozwoju usług również powinny być niezależne. *
Różne zespoły SLDC i różne zespoły programistów
w prawdziwym systemie MS może być kilka zespołów zaangażowanych w rozwój ekosystemu, z których każdy odpowiada za jedną lub więcej usług. Z kolei zespoły te mogą znajdować się w różnych biurach, miastach, krajach, planach… Być może nawet się nie znają, co bardzo utrudnia dzielenie się wiedzą lub kodem (jeśli to możliwe). Ale może to być bardzo wygodne, ponieważ wspólny kod oznacza również rodzaj rozumowania dzielenia się i ważne jest, aby pamiętać, że cokolwiek ma sens dla konkretnego zespołu, nie musi robić tego dla innego zespołu. Na przykład, biorąc pod uwagę klienta DTO , może być inaczej w zależności od usługi w grze, ponieważ klienci są interpretowani (lub widziani) inaczej niż każda usługa.
Różne potrzeby, różne technologie
Izolowane SLDC pozwalają również zespołom wybrać stos, który najlepiej odpowiada ich potrzebom. Nałożenie DTO zaimplementowanych w określonej technologii ogranicza możliwości wyboru zespołów.
DTO nie są ani zasadami biznesowymi, ani umowami o świadczenie usług
Czym naprawdę są DTO? Proste obiekty bez innego celu niż przenoszenie danych z jednej strony na drugą. Torby z getterami i seterami. Nie jest to „wiedza”, którą warto ponownie wykorzystać, ponieważ w ogóle nie ma wiedzy. Ich zmienność czyni ich również złymi kandydatami do połączenia.
W przeciwieństwie do tego, co stwierdził Dherik, usługa musi mieć możliwość zmiany DTO bez konieczności dokonywania zmian w innych usługach w tym samym czasie. Usługi powinny być tolerancyjnymi czytelnikami, tolerancyjnymi pisarzami i odpornymi na błędy . W przeciwnym razie powodują sprzężenie w taki sposób, że architektura usługi nie ma sensu. Jeszcze raz, w przeciwieństwie do odpowiedzi Dherika, jeśli trzy usługi potrzebują dokładnie tych samych DTO, prawdopodobnie coś poszło nie tak podczas rozkładu usług.
Różny biznes, różne interpretacje
Chociaż mogą istnieć (i będą) przekrojowe koncepcje między usługami, nie oznacza to, że musimy narzucić model kanoniczny, aby zmusić wszystkie usługi do interpretowania ich w ten sam sposób.
Studium przypadku
Powiedzmy, że nasza firma ma trzy działy: obsługi klienta , sprzedaży i wysyłki . Powiedz, że każda z tych wersji udostępnia jedną lub więcej usług.
Obsługa klienta, ze względu na język swojej domeny , wdraża usługi wokół koncepcji klientów, gdzie klientami są osoby . Na przykład klienci są modelowani jako imię , nazwisko , wiek , płeć , adres e-mail , telefon itp.
Powiedzmy teraz, że sprzedaż i wysyłka modelują również swoje usługi zgodnie z ich językami domen. W tych językach pojawia się również klient koncepcyjny, ale z subtelną różnicą. Dla nich klienci nie są (koniecznie) osobami . Do sprzedaży , klienci są numer dokumentu karty kredytowej i adres rozliczeniowy , o wysyłce do pełnej nazwy i adresu wysyłki za.
Jeśli zmusimy sprzedaży i wysyłki do przyjęcia kanoniczny model danych Obsługa klienta , jesteśmy zmuszając je do czynienia z niepotrzebnych danych, które może skończyć się wprowadzenie niepotrzebnej złożoności jeśli muszą utrzymać całą reprezentację i utrzymać klienta danych w synchronizacji z obsługą klienta .
Powiązane linki
* Oto, na czym polega siła tej architektury
proto
plik gRPC lubavro
schemat dla Kafki i wygenerować DTO w obu usługach, ale nie udostępniłbym wspólnej biblioteki między dwoma projektami.