Publikacja zdarzeń
Agregat

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.
Wewnętrzna kolekcja zdarzeń w agregacie
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
Implementacja w agregacie
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
Publikacja z wewnętrznej kolekcji
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
Zwracanie zdarzeń przez agregat
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.
Statyczna klasa publikująca
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.
Last updated
Was this helpful?