Publikacja zdarzeń
Last updated
Was this helpful?
Last updated
Was this helpful?
Przyjmuje komendy (niebieska)
Sprawdza szereg założeń biznesowych (ciemna żółta -> normalnie różowa)
Zmienia stan (pomarańczowa)
To zadaniem agregatu jest wywołanie zdarzenia, a nie serwisu domenowego czy serwisu aplikacyjnego.
protected Raise - metoda pozwalająca na dodanie zdarzenia do wewnętrznej kolekcji agregatu.
public GetChanges - pobieranie stanu kolekcji, bez możliwości mutacji
public ClearChanges - pozwala na mutacje, ale tylko poprzez wyczyszczenie całej kolekcji
Metoda - komenda. Niebieska karteczka.
Następnie sprawdzenia (ify) - niezmienniki. Żółte karteczki (doc. różowe)
Ustawienie zmiany wewnątrz agregatu
Raise - wysłanie zdarzenia do wykonania
Użyta metoda pause.
Serwis aplikacyjny pobiera agregat dzięki repozytorium
Pauzuje operację w agregacie
Pobiera zmiany (getChanges)
Za pomocą domain event publishera publikuje te wydarzenia. Nie wiemy co zostanie wykorzystane, więc interfejs powinien być wspólny. To nie musi być event jak w Laravelu - to może być np. Kafka, albo jakiś inny serwis w zależności od potrzeb
Czyści wydarzenia z agregatu
Zapisuje repozutorium
Alternatywnie można nauczyć agregat zwracania listy wydarzeń. Łamie to jednak CQS. Świadome złamanie nie jest jednak problemem, jeśli takie są problemy.
Nie potrzebujemy już tutaj metod opisanych w wewnętrznej kolekcji zdarzeń w agregacie.
Może być to lista, ale może to być też Either. W takiej sytuacji nie potrzebujemy kolekcji.
Zasada działania zwracania przez agregat będzie bardo podobnie obsługiwana jak to co mamy w naszym wcześniejszym przykładzie, tylko zamiast metody getChanges mamy zwracane wydarzenia które możemy persystować.
Oba przypadki testowane są w podobny sposób.
Działanie agregatu
Wrzucenie eventu
Poinformowanie listenerów
Tutaj mogą się pojawić problemy z tym, że należy zadbać o sagę. Jeśli coś się wyrzuci w między czasie, mogą pojawić się spore problemy.