Był monolit, są mikroserwisy. Architekci wymyślili sobie, by stworzyć wewnętrzny framework, który będzie zawierał libki konfigurujące wiele rzeczy jak connectory do kafki, klient http, dependencies, logowanie po to żeby była 1 wspólna konfiguracja dla wszystkich mikroserwisów. DRY.
Programiści nie chcą używać tego frameworka, bo jest napisany dziwnie np. klient http jest udekorowanym RestTemplate
,który zapodać możesz do klasy tylko przez beana, bo:
FrameworkClient implements HttpClient {
@Autowired
private RestTemplate restTemplate;
FrameworkClient() {
}
// nawet brak setterów
}
Jednocześnie we frameworku jest zdefiniowany primary bean resttemplate:
@Bean
@Primary
RestTemplate restTemplate() {
...
}
inny z przykładów dziwności to konfiguracja kafki:
KafkaConsumerConfig extends KafkaProducerConfig {
...
}
-
Architekt: używajcie naszego frameworka do http
Programista: ale używamy już FeignClienta
Architekt: a uzgodnił ktoś z nami, że go używacie? Musicie go zastąpić -
Programista: leci mi błąd jak próbuję użyć tego klienta
client.call(...)
jakiś NPE, potrzebuję coś dokonfigurować? wiesz o co chodzi?
Architekt: nie, nikt nie zgłaszał. To zanurkuj tam i obczaj o co chodzi. -
W międzyczasie programista2 z innego zespołu trafił na ten sam błąd i pewnie też stracił czas na rozkminiane tego. Ostatecznie nic nikomu nie powiedział, zamknął taska pisząc
FRAMEWORK RZUCA NPE TO NIE BEDE GO UZYWAŁ
-
Programista przeanalizował NPE, znalazł linię kodu, gdzie leci ten NPE i wyczaił, że błąd pojawia się, gdy
client.call(...)
jest użyty poza contextem RestControllera (nie jest w następstwie odpowiedzi endpointa, nie wiem ja kto nazwać). Programista odnalazł zespół za to odpowiedzialny i zgłosił im ten błąd.
Twórca: zobacz sobie jak to jest użyte w tym i tym microserwisie, u mnie działa
Programista: tam nie ma tego przykładu, zobacz.
Programista napisał nawet im propozycję poprawki.
Programista: moja propozycja, teraz działa. Poprawcie to albo wywalajcie UnsupportedOperationException z informatywnym msg
Twórca: zgłoś buga. -
Po miesiącu.
Twórca: a serio potrzebujesz wołać tego clienta poza contextem? To podaj przykład, gdzie tego potrzebujesz.
Programista: tu i tu.
Twórca: no to nie rób tak tylko użyj naszego frameworka i wtedy masz to w contextcie. Nie naprawiamy. -
Manager nietechniczny podchwycił temat i zrobił gównoburze, że tamci nie chcą naprawić błędu i że w ogóle ich biblioteka to syf i wszyscy na to narzekają.
-
Twórca na to, że tu nie ma żadnego błędu tylko programista nie czai co do niego się mówi i że dostał info jak tego używać.
Co o tym sądzicie i co należałoby zrobić?
tak się to robi
. Chcę wiedzieć czy ja mam rację czy może ja się czepiam nadgorliwie