Mentionsy Mentionsy
Better Software Design
Better Software Design

102. State Obsession - EDA /Anti/Patterns

08.04.2026 ·30 min 16 s

W poprzednim odcinku mówiliśmy o przesadnej szczegółowości eventów. Tym razem uderzamy w drugą stronę — w stronę zdarzeń-worków, które zamiast o biznesie, mówią nam tylko o tym, że "coś się w bazie zmieniło". Razem z Oskarem bierzemy na tapet CRUD-sourcing, często nazywany też obsesją stanu. State Obsession to sytuacja, w której zamiast faktów takich jak EmailConfirmed czy PersonalDocumentVerified, Twój system wypluwa generyczne UserUpdated. Na pierwszy rzut oka wygląda to na ułatwienie, ale w praktyce to prosty przepis na wyciek szczegółów implementacyjnych i utratę intencji użytkownika. Zapraszam na stronę https://bettersoftwaredesign.pl, gdzie znajdziesz jeszcze więcej materiałów.

I za chwilę wrócę, kiedy to może mieć sens. Albo na przykład, gdy robimy takie, ja to nazywam, poor man's replication, czyli zamiast używać replikacji bazy danych, to wysyłamy wszystkie te zdarzenia po szynie i żeby tylko lokalnie sobie w innym module zrobić klona, to też jakimś mechanizmem, nazwijmy to generycznym, może jesteśmy w stanie to opędzlować przez jakiś czas. Jeżeli tylko naszą ideą jest zreplikowanie tych danych, Może mieć to sens. A zwykle po to robimy zdarzenia, żeby jednak jakieś operacje biznesowe były nim wyzwolone. No i zinterpretuj to sobie, nie? Weź jak to... Byłem w tym miejscu i mówię, że jest trudno. Bardzo często. Zwłaszcza, że ten event wyleciał z Legacy. Tak, dokładnie.

W sumie szukam miejsc czy też jakiejś sytuacji, z których właśnie takie zdarzenia Updated, changed, wylatują. I tak mi przychodzą na myśl właśnie takie powody typu niedoeksplorowana domena de facto. Zrobienie właśnie takiego, wiesz, crowdsourcingu, tak jak tutaj opowiadasz, legacy. Z tego coś wyskakuje. Albo ta wspomniana przez ciebie kawka. Popularnym trendem jest właśnie twierdzenie, że możemy sobie zacząć wdrażanie architektur opartych na zdarzeniach i to właśnie przez Confluent Kafka jest bardzo promowane, chociaż teraz trochę mniej. Jak byłem na Kafka Summit w zeszłym roku, to już faktycznie podkreślali wartość jakości danych, chyba się zorientowali, że już nie tędy droga. Ale przez bardzo długi czas było promowane to, że zapnijmy sobie te CDC, czyli te tzw.

Change Detection Capture, czyli większość baz danych relacyjnych i nie tylko, ma taką możliwość, że możemy nasłuchiwać na każdy insert, każdy update, każdy delete w naszej tabeli i opublikować takie zdarzenie właśnie dodano, zaktualizowano, usunięto. I Kafka bardzo fajnie technicznie to pozwala zautomatyzować z takimi narzędziami jak Divisium, Kafka Connect. Jako narzędzie jest to super, bo faktycznie jeżeli to sobie wepniemy, skonfigurujemy, same dane się będą propagować. Tylko, że to nie jest tędy droga, bo to jest dokładnie ten sam problem jak mówisz o legacy, czyli że tylko i wyłącznie dostaniemy zdarzenia typu dodano, zaktualizowano, usunięto. Co gorsza, Te wszystkie narzędzia Change Detection Capture zapinamy na konkretne tabele, więc jak wiemy zwykle w tego typu systemach jedna zmiana wyzwala zmiany w kilku tabelach i zamiast znowu mieć jedno zdarzenie, że biznesowo się coś wydarzyło dostaniemy na tą naszą szynę tam pewnie z 3 razy, tyle ile mamy tabel, tyle dostaniemy zdarzeń updated.

Pokazano wszystkie 3 dopasowania. Transkrypcja generowana automatycznie i niesprawdzana ręcznie — może zawierać błędy.