Oskar Dudycz

Pragmatic about programming

Co to jest zdarzenie i strumień zdarzeń? Wyjaśniam podstawy

2019-09-22 oskar dudyczEvent Sourcing

front

Cześć!

No i popatrz, dzieki zeszłotygodniowego spóźnieniu, w tym tygodniu dostaniesz 2 maile. Jakie zwiększyć wydajność? Spóźnić się. No dobra koniec sucharów.

Ostatnim razem pisałem o tym, że konto bankowe wbrew pozorom nie jest do końca dobrym przykładem Event Sourcingu. Wspomniałem o agregatach i o encjach, no dobrze, ale czy nie powinienem zacząć od początku? Dzisiaj spróbujemy sobie usystematyzować podstawowe terminy.

Czym jest zdarzenie? Zdarzenie jest to fakt. Niesie ze sobą konkretną informację. Czyli przykładowo:

  • wysłano newsletter o zdarzeniach,
  • polska reprezentacja awansowała do ćwierćfinału mistrzostw europy w siatkówkę,
  • zarejestrowano przelew na konto
  • zmieniono nazwę użytkownika,
  • dodano nowe zamówienie.

Widzisz tutaj pewną zależność? Zdarzenie zawsze dotyczy wydarzenia z przeszłości. I tak też powinno być nazywane, czyli w trybie dokonanym, np. “NewsletterWasSent”, “InflowToAccountRecorded”, “UserNameChanged”.

Tak jak w życiu zdarzenia są niezmienialne - keśli zrobię literówkę w mailu już tego nie cofnę. Jeśli zrobiłem przelew z za małą kwotą to nie mogę go zmodyfikować, mogę co najwyżej puścić dodatkowy. Jeśli wystawiłem błędną fakturę, to nie mogę jej zmienić, muszę wystawić jej korektę. Ogólnie to co się wydarzyło to się wydarzyło. Co zostało zobaczone - już się nie odzobaczy.

Dokładnie tak jak w życiu, jeśli się coś wydarzyło to już tego nie cofniemy. Możemy zignorować wydarzenia, ale nie zmienimy już ich. Każdy fakt może mieć kilka różnych interpretacji, widać to doskonale po naszej polityce, ale fakt pozostaje faktem.To, że dzisiaj pięknie świeci słońce dla większości z nas będzie fajnym wydarzeniem (niektórzy nawet napiszą maila siedząc na słonecznym balkonie), inny za to powie, że słabo, bo go razi w oczy, albo chciał oglądać Netflixa, a tak to go dziewczyna na spacer ciągnie.

Zapewne już obił Ci się o uszy na termin strumień zdarzeń (Event Stream)? Co to takiego? Zdarzenia w życiu zachodzą jedne po drugim. Budzimy się, myjemy zęby, przebieramy się, idziemy do pracy. Strumień zdarzeń najprościej by było określić jako właśnie uporządkowaną sekwencję zdarzeń. Dlaczego zatem strumień, a nie po prostu kolejka? Trochę poetycko może, ale dlatego, że tak jak nie zatrzyma się płynącej rzeki, tak też nie zatrzyma się biegu wydarzeń. Tak samo dopóki nasz system istnieje i nasi użytkownicy wykonują w nim jakieś operacje zdarzenia będą spływać. Można by dorzucić jeszcze znane i lubiane stwierdzenie, że “nie można wejść dwa razy do tej samej rzeki”. Nieco ograne, możesz nazwać mnie Paolo Coelho, ale tak to właśnie wygląda. Jeżeli zerkniemy kilka sekund później na stan naszego systemu to okaże się, że jakieś nowe zdarzenia już zdążyły “wpłynąć”.

strumien

No dobrze, ale jak to zamodelować? W klasycznym podejściu, jeden obiekt (encja/agregat) to jeden wpis w tabeli. W Event Sourcing jeden obiekt (encja/agregat) to jeden strumień zdarzeń. Identyfikator strumienia jest tożsamy z identyfikatorem obiektu i zwykle reprezentowany jako Guid. Klasycznie przy każdej operacji na obiekcie dodajemy lub aktualizujemy jego rekord w tabeli (np. zmieniając nazwę użytkownika, aktualizujemy kolumnę “UserName” w tabeli “Users”). W przypadku Event Sourcing, każda operacja to nowy wiersz w tabeli zdarzeń. Tak, nie przewidziało Ci się, zdarzenia i strumienie zdarzeń można zamodelować w tradycyjnej relacyjnej bazie danych. Jak? O tym w kolejnym newsletterze. Nie możesz się doczekać? Napisz - podrzucę jakiś “sneak peek”.

Podsumowując - zdarzenie to wiadomość niosąca informacje o fakcie z przeszłości.

Jakie są cechy zdarzenia?

  • dotyczy przeszłości,
  • jest niezmienialne,
  • można je zignorować lub zinterpretować w różny sposób, ale…
  • nie można go cofnąć.

Co to jest strumień zdarzeń? Jest to uporządkowana sekwencja zdarzeń, czyli zdarzenia zachodzące jedne po drugim. Dlaczego strumień? Bo dopóki nasz system działa, to się nie skończy i kolejne zdarzenia będą do niego wpływać.

Mam nadzieję, że pomogłem.

Daj znać co o tym sądzisz, ale nie wcześniej niż wieczorem, teraz ciesz się z pięknej niedzieli! Pozdrawiam serdecznie.

Oskar

  • © Oskar Dudycz 2019-2020