Witam,
Potrzebuję zrobić kasowanie danego agregatu po id, problem mam z tym, że za bardzo nie wiem jak obsłużyć komendę kasowania.
W projekcie event handler używa Broadway\EventSourcing\EventSourcingRepository
a tutaj jest tak naprawdę tylko metoda load
i save
Jeśli stosuje się event sourcing to usuwania "fizycznego" się nie używa. Zamiast tego emituje się event sygnalizujący usunięcie agregatu, np. OrderRemoved. Co innego jeśli ma się oddzielny read model- po otrzymaniu eventu można usunąć zbudowaną projekcję z bazy.
Aventus napisał(a):
Jeśli stosuje się event sourcing to usuwania "fizycznego" się nie używa. Zamiast tego emituje się event sygnalizujący usunięcie agregatu, np. OrderRemoved. Co innego jeśli ma się oddzielny read model- po otrzymaniu eventu można usunąć zbudowaną projekcję z bazy.
Spoko, czyli wystarczy, że zapisze sobie event że coś zostało skasowane. Ale czy czasem dalej nie będzie możliwe operowanie na tym agregacie?
Ps. dopiero się oswajam z taką architekturą.
Agregat musi zapewniać transakcyjność w obrębie swojego kontekstu domenowego. W tym przypadku nie powinien pozwolić na dokonywane dalszych operacji, tak samo jak np. warstwa widoku nie powinna w ogóle mieć wyświetlonego czegoś co zostało usunięte.
Najważniejsza zasada przy event sourcingu jaka trzeba zapamiętać- eventow się nie usuwa. Nigdy. Nawet jeśli zostanie wyemitowany jakiś błędny event, to należy wyemitowac kolejny event korekcyjny.